在solr中搜索中文不返回更大的单词的结果

时间:2018-01-05 16:12:31

标签: indexing solr lucene sitecore cjk

我正在尝试将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:(代理*)

1 个答案:

答案 0 :(得分:0)

当存在通配符时,分析链不会运行。由于你定义了一个标记化器,我的猜测是这些单词(我的中文并不好)被存储为单独的标记。由于您有通配符,因此不会调用令牌化程序(或任何其他过滤器,除非它们是MultitermAware),并且新代理*不会匹配任何单个令牌。

您可以通过设置一个未经过处理并与之匹配的字段来解决此问题。使用copyField指令将相同的内容索引到具有不同处理指令的多个字段中,并搜索未经标记或处理的字段。