我是solr的新手。我在solr中的数据类似于" name":" John Lewis" 。 查询形成的外观和搜索完美如 fq = name%3A +%22John + Lewis%22 这是在Solr控制台中形成的,效果很好。
我的要求是将来自我的Java图层的特定单词搜索为" JohnLewis" 。它必须与" John Lewis"在solr repo。
此搜索不仅限于名称字段(2个字和中间的空格)。 我还有其他一些细节,例如"现金奖励信用卡" ,它有4个字,用户会查询如" CashRewardCreditCards" 。
如果可以在schema.xml中使用solr中提供的任何解析器处理这个问题,有人可以帮我解决这个问题。
答案 0 :(得分:1)
您需要创建自定义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
字符过滤器是预处理输入字符的组件。字符过滤器可以像令牌过滤器一样链接并放置在Tokenizer前面。 PatternReplaceCharFilterFactory过滤器使用正则表达式来替换或更改字符模式
模式:\s*
表示零个或多个空格字符
其次使用word_concate创建一个字段作为类型:
<field name="cfname" type="word_concate"/>
将您的姓名字段复制到带有复制字段的cfname
<copyField source="name" dest="cfname"/>
第三次重新索引数据。
现在您可以查询:cfname:"JohnLewis"
它将返回名称John Lewis
答案 1 :(得分:0)
假设您的输入是CamelCase,如图所示我将使用Solr的Word分隔符过滤器 使用分析器查询端的splitOnCaseChange参数作为起点。这将采用诸如CashRewardCreditCards之类的输入令牌并生成令牌现金奖励信用卡
另见:
答案 2 :(得分:0)
它有splitOnCaseChange
属性。如果您将其设置为1,JohnLewis将被编入索引为John Lewis。
您需要将其添加到查询分析器中。如果用户搜索JohnLewis,则搜索将被翻译为John Lewis。