我正在尝试将SOLR配置为使用中文进行搜索,但我对结果的质量有问题。在我的方案中,我为中文声明了fieldType:
<fieldType name="text_general_zh" class="solr.TextField">
<analyzer class="org.apache.lucene.analysis.cjk.CJKAnalyzer" words="lang/stopwords_zh.txt"/>
</fieldType>
我也试过了:
<analyzer>
<tokenizer class="solr.HMMChineseTokenizerFactory"/>
<filter class="solr.CJKWidthFilterFactory"/>
<filter class="solr.StopFilterFactory"
words="org/apache/lucene/analysis/cn/smart/stopwords.txt"/>
<filter class="solr.PorterStemFilterFactory"/>
<filter class="solr.LowerCaseFilterFactory"/>
</analyzer>
自定义字段:
<field name="namesearch_t_th" type="text_general_th" indexed="true" stored="true" />
我在索引中有文档,其中包含该字段的值:
“namesearch_t_th”:“新代理 - 模块”
问题是当我想用3个中文字符或更多字符进行搜索时。 SOLR不会返回任何结果。当我只给两个或一个角色时它起作用。你知道如何使它超过2个字符吗?
不工作查询:
contentnamesearch_t_zh:(新代理*)
有工作:
contentnamesearch_t_zh:(新代*)
contentnamesearch_t_zh:(代理*)
答案 0 :(得分:0)
当存在通配符时,分析链不会运行。由于你定义了一个标记化器,我的猜测是这些单词(我的中文并不好)被存储为单独的标记。由于您有通配符,因此不会调用令牌化程序(或任何其他过滤器,除非它们是MultitermAware),并且新代理*不会匹配任何单个令牌。
您可以通过设置一个未经过处理并与之匹配的字段来解决此问题。使用copyField指令将相同的内容索引到具有不同处理指令的多个字段中,并搜索未经标记或处理的字段。