我正在尝试在Solr中设置一些基本的同义词.我一直在努力的是:
我们,美国,美国
我的理解是,将其添加到同义词文件将允许用户搜索美国,并获取包含美国或美国的文档.如果用户投入美国或美国,则同样如此.
不幸的是,有了这个,当我进行搜索时,我会得到包含所有三个单词的项目的结果 - 它正在对同义词进行AND而不是OR.
如果我打开调试,这确实是我所看到的(加上一些词干):
(+DisjunctionMaxQuery(((westCite:us westCite:usa westCite:unit) | (text:us text:usa text:unit) | (docketNumber:us docketNumber:usa docketNumber:unit) | ((status:us status:usa status:unit)^1.25) | (court:us court:usa court:unit) | (lexisCite:us lexisCite:usa lexisCite:unit) | ((caseNumber:us caseNumber:usa caseNumber:unit)^1.25) | ((caseName:us caseName:usa caseName:unit)^1.5))))/no_coord
我做错了导致这个吗?我的defaultOperator设置为AND,但我希望同义词过滤器能够理解它.
rfe*_*eak 20
尝试仅在索引期间使用SynonymFilterFactory,而不是在查询期间.
文档也提示了这一点:http: //wiki.apache.org/solr/AnalyzersTokenizersTokenFilters#solr.SynonymFilterFactory
为了更好地理解同义词搜索,请遵循以下实现的逐步过程(我正在使用solr 6.5。*版本):
步骤1:
下载country-synonyms.txt文本文件并将其放在以下路径中:
路径:\ solr-6.5.1 \ server \ solr \ yourCore \ conf
yourCore:核心名称应相应更改
第2步:
在上述相同路径中的托管模式文件中添加字段类型:
<fieldType name="country" class="solr.TextField" positionIncrementGap="100" sortMissingLast="true">
<analyzer>
<tokenizer class="solr.KeywordTokenizerFactory"/>
<filter class="solr.TrimFilterFactory"/>
<filter class="solr.SynonymFilterFactory" expand="false" ignoreCase="true" synonyms="country-synonyms.txt" tokenizerFactory="solr.KeywordTokenizerFactory"/>
<filter class="solr.LowerCaseFilterFactory"/>
</analyzer></fieldType>
Run Code Online (Sandbox Code Playgroud)
步骤3: 用型添加您的字段(国籍)国家在同一个文件中(托管模式)。
<field name="Nationality" type="country" indexed="true" stored="true"/>
Run Code Online (Sandbox Code Playgroud)
步骤4: 重新启动solr。
solr restart -p <your solr port>
Run Code Online (Sandbox Code Playgroud)
步骤5:
现在,使用包含国籍的字段导入数据。***
步骤6:
现在查询以下情况并进行测试:
查询:
以上所有查询都会给您相同的结果。
注意:***仅在执行上述步骤(包括solr重新启动)之后才导入数据。它可能不适用于现有数据(有关更多详细信息,请参阅:AnalyzersTokenizersTokenFilters)
| 归档时间: |
|
| 查看次数: |
29705 次 |
| 最近记录: |