[英]Solr query data with white space needs to be queried
我是新来的solr。 我在solr中有类似“ name”:“ John Lewis”之类的数据 。 查询形成的外观和搜索效果完美,为fq = name%3A +%22John + Lewis%22。这是在Solr控制台中形成的,效果很好。
我的要求是搜索来自我的Java层的特定单词“ JohnLewis” 。 在solr repo中必须将其映射为“ John Lewis”。
此搜索不仅限于名称字段(两个字和一个空格)。 我还有其他一些详细信息,例如“现金奖励信用卡” ,它有4个字,用户会查询类似“ CashRewardCreditCards” 。
如果可以使用solr中可用的任何解析器在schema.xml中进行处理,那么有人可以帮助我。
您需要创建自定义fieldType。
首先在您的Solr模式中定义一个fieldType:
<fieldType name="word_concate" class="solr.TextField" indexed="true" stored="false">
<analyzer>
<charFilter class="solr.PatternReplaceCharFilterFactory" pattern="\s*" replacement=""/>
<tokenizer class="solr.StandardTokenizerFactory"/>
</analyzer>
</fieldType>
在这里,我们将fieldType命名为word_concate
。
我们使用了CharFilterFactories的solr.PatternReplaceCharFilterFactory
字符过滤器是对输入字符进行预处理的组件。 字符过滤器可以像令牌过滤器一样链接在一起,并放置在令牌生成器的前面。 PatternReplaceCharFilterFactory过滤器使用正则表达式替换或更改字符模式
模式: \\s*
表示零个或多个空格字符
其次创建一个以word_concate作为类型的字段:
<field name="cfname" type="word_concate"/>
使用复制字段将您的姓名字段复制到cfname
<copyField source="name" dest="cfname"/>
第三重新索引数据。
现在您可以查询: cfname:"JohnLewis"
它将返回名称John Lewis
假设您的输入是CamelCase,如图所示,我将使用Solr的Word Delimiter Filter,并在分析器的查询侧将splitOnCaseChange参数作为起点。 这将使用输入令牌,例如CashRewardCreditCards并生成令牌Cash Reward Credit Cards
也可以看看:
它具有splitOnCaseChange
属性。 如果将其设置为1,JohnLewis将被索引为John Lewis。
您需要将此添加到查询分析器。 如果用户搜索JohnLewis,则搜索结果将翻译为John Lewis。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.