如何使solr同义词起作用

mli*_*ner 10 solr synonym

我正在尝试在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


shi*_*han 5

为了更好地理解同义词搜索,请遵循以下实现的逐步过程(我正在使用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:

现在查询以下情况并进行测试:

查询

  1. 国籍:美国
  2. 国籍:美国
  3. 国籍:美国
  4. 国籍:美国

以上所有查询都会给您相同的结果。

注意:***仅在执行上述步骤(包括solr重新启动)之后才导入数据。它可能不适用于现有数据(有关更多详细信息,请参阅:AnalyzersTokenizersTokenFilters