我们需要搜索与同义词匹配的记录。例如,如果文档已编制索引,其中某个字段的值位于不同的记录worst和bad中。我有一个synonym.txt,其中配置了单词bad、worst、dawful作为同义词,并且文件的字段类型为text_general,该文件配置了分析器类型查询中的同义词过滤器。
当用户使用可怕的查询时,从索引文档中返回具有坏和最坏的记录。当我使用模糊搜索可怕的f ~2时,没有返回任何记录,期望具有坏和最坏的记录。这怎么能存档呢?我们能否实现自定义代码以实现此要求,因为用户甚至可能输入拼写错误的同义词。
以下是schema.xml中的字段配置
<fieldType name="text_general" class="solr.TextField"
positionIncrementGap="100" multiValued="true">
<analyzer type="index">
<tokenizer class="solr.StandardTokenizerFactory"/>
<filter class="solr.StopFilterFactory" words="stopwords.txt" ignoreCase="true"/>
<filter class="solr.LowerCaseFilterFactory"/>
</analyzer>
<analyzer type="query">
<tokenizer class="solr.StandardTokenizerFactory"/>
<filter class="solr.StopFilterFactory" words="stopwords.txt" ignoreCase="true"/>
<filter class="solr.SynonymFilterFactory" expand="true" ignoreCase="true" synonyms="synonyms.txt"/>
<filter class="solr.LowerCaseFilterFactory"/>
</analyzer> </fieldType>
<field name="emotion" type="text_general"/>
2条答案
按热度按时间ct2axkht1#
如果你输入了readf ~2,同义词将不会被触发,因为readf不匹配任何内容。
如果您调试查询,您将看到以下可怕的结果:
对于恐怖分子2:
你可能需要同义词的可怕或搜索可怕的~2
请注意,此链接讨论了查询时间同义词扩展的一些缺点:http://wiki.apache.org/solr/AnalyzersTokenizersTokenFilters#solr.SynonymFilterFactory
laximzn52#
我有一个类似的情况。在我的电影搜索项目中,我定义我的同义词为
我的原始查询是
不幸的是,这是行不通的,因为如果我输入“医生”作为搜索词,它不会产生“卡利加里博士的内阁”。
我所做的是将查询更改为:
它本质上是(去掉括号中的编码)
这会产生令人满意的结果,所以我认为OR表达式的第二部分现在是匹配同义词的部分。