在 solr 中搜索中文不返回更大单词的结果
Search in solr for Chinese not returning result for bigger words
我正在尝试将 SOLR 配置为使用中文进行搜索,但返回的结果质量存在问题。在我的方案中,我为中文声明了字段类型:
<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 没有 return 任何结果。当我只给出两个或一个字符时它会起作用。你知道如何让它处理超过 2 个字符吗?
查询无效:
contentnamesearch_t_zh:(新代理*)
正在工作:
contentnamesearch_t_zh:(新代*)
contentnamesearch_t_zh:(代理*)
当存在通配符时,分析链不是 运行。由于您定义了分词器,我猜这些词(我的中文不太好)是作为单独的分词存储的。由于您有通配符,因此不会调用分词器(或任何其他过滤器,除非它们是 MultitermAware),并且新代理* 不匹配任何单个分词。
您可以通过拥有一个未处理的字段并与之匹配来解决此问题。使用copyField指令将相同的内容索引到不同处理指令的多个字段中,并针对未标记化或处理的字段进行搜索。
我正在尝试将 SOLR 配置为使用中文进行搜索,但返回的结果质量存在问题。在我的方案中,我为中文声明了字段类型:
<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 没有 return 任何结果。当我只给出两个或一个字符时它会起作用。你知道如何让它处理超过 2 个字符吗?
查询无效:
contentnamesearch_t_zh:(新代理*)
正在工作:
contentnamesearch_t_zh:(新代*)
contentnamesearch_t_zh:(代理*)
当存在通配符时,分析链不是 运行。由于您定义了分词器,我猜这些词(我的中文不太好)是作为单独的分词存储的。由于您有通配符,因此不会调用分词器(或任何其他过滤器,除非它们是 MultitermAware),并且新代理* 不匹配任何单个分词。
您可以通过拥有一个未处理的字段并与之匹配来解决此问题。使用copyField指令将相同的内容索引到不同处理指令的多个字段中,并针对未标记化或处理的字段进行搜索。