我知道这个问题已经问过几次了,但是直到现在我才明白...
因此,我想搜索“ 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。
如果您需要更多详细信息,请告诉我。
希望你能帮助我。