Solr 7使用空格查询带有多个术语的同义词

时间:2018-06-20 15:39:05

标签: solr whitespace synonym search-multiple-words

我知道这个问题已经问过几次了,但是直到现在我才明白...

因此,我想搜索“ ms sql”,而不只是“ ms”或“ sql”。当我使用引号时,分数要比不使用引号高得多。

我试图使用ShingleFilterFactory来获得组合结果。但这是行不通的。在我的查询中,不使用同义词,仅使用我输入的单词。结果始终为0。

我还看到了一些具有精确映射的解决方案,例如:

MS SQL, Microsoft SQL, MSSQL => MSSQL 

删除空格。但是我需要在末尾精确匹配单词,因此我无法在索引时间做到这一点。

我的schema.xml如下:

[...]
<field name="Beschreibung" type="text" stored="true" indexed="true"/>
<fieldType name="text" class="solr.TextField" positionIncrementGap="100">
[...]
<analyzer type="index">
  <tokenizer class="solr.WhitespaceTokenizerFactory"/>
  <filter class="solr.WordDelimiterFilterFactory" generateWordParts="1" generateNumberParts="0" catenateWords="1" catenateNumbers="0" catenateAll="0" splitOnCaseChange="0" preserveOriginal="1" types="types.txt"/>
  <filter class="solr.LowerCaseFilterFactory"/>
</analyzer>

<analyzer type="query" >
  <tokenizer  class="solr.KeywordTokenizerFactory"/>
  <filter class="solr.ShingleFilterFactory" maxShingleSize="3" outputUnigrams="false"/>
  <filter class="solr.SynonymGraphFilterFactory" expand="true" ignoreCase="true" synonyms="synonyms.txt" tokenizerFactory="solr.KeywordTokenizerFactory"/>
  <filter class="solr.LowerCaseFilterFactory"/>
  <filter class="solr.StopFilterFactory" ignoreCase="true" words="stopwords.txt"/>
  <filter class="solr.WordDelimiterFilterFactory" generateWordParts="1" generateNumberParts="0" catenateWords="1" catenateNumbers="0" catenateAll="0" splitOnCaseChange="0" preserveOriginal="1" types="types.txt"/>
  <filter class="solr.LowerCaseFilterFactory"/>
  <filter class="solr.RemoveDuplicatesTokenFilterFactory"/>
</analyzer>

我的同义词.txt:

MSSQL, MS SQL, Microsoft SQL

当我更改schema.xml中的内容时,我总是重新启动Solr。

如果您需要更多详细信息,请告诉我。

希望你能帮助我。

0 个答案:

没有答案