我正在使用Solr 5.5.2和Lucene 5.5.2。
我要做的是创建自定义标记生成器,用斜杠符号分隔文本。
以下是代码示例:
public class SlashSymbolTokenizer extends CharTokenizer {
public SlashSymbolTokenizer() {
}
public SlashSymbolTokenizer(AttributeFactory factory) {
super(factory);
}
@Override
protected boolean isTokenChar(int c) {
return c != 47 && c != 92;
}
}
schema.xml中
<fieldType name="string_with_slash_tokenizer" class="solr.TextField" sortMissingLast="true">
<analyzer>
<tokenizer class="tokenizer.SlashSymbolTokenizerFactory"/>
<filter class="solr.LowerCaseFilterFactory"/>
</analyzer>
</fieldType>
在索引时为字段"color":"Black/white"
应用此标记生成器后,我假设我可以通过查询"color":"black white"
之类的内容进一步匹配它,但它不起作用..此字段仅匹配初始值"Black/white"
我的实施有什么问题?你有什么想法吗?
非常感谢!
答案 0 :(得分:1)
由于您的标记生成器仅在/
上标记,因此&#34;黑白色&#34;查询将是包含内容black white
的单个标记。因为该令牌与black
或white
不匹配,所以找不到匹配项。
如果要在空格和/
上进行标记,可以在自己的代码中处理,也可以使用像WordDelimiterFilter这样的东西。您还可以使用WhitespaceTokenizer并使用自定义分隔符列表将WordDelimiterFilter分割为/
,或者您可以使用PatternTokenizer提供自己的正则表达式集来分割文本(例如使用/
和空格。
使用solr admin下的分析页面确切了解您的字段的处理和标记方式。