我遇到一个问题,当我搜索作为文本字段值一部分的术语时,似乎无法获得完整的结果列表。我想要的是: 1)如果字段中的术语和标记化值之间存在完全匹配,我希望该结果首先显示。 2)我还想返回在标题中其他位置具有搜索词的结果,无论它是整体匹配还是整体匹配。
例如,如果我在索引中对此字段具有以下值:
,有人使用搜索词710
,我希望首先列出710 mA Loop Valve Tester
项目,然后再列出其他项目。问题是,即使它具有最直接的匹配,它也显示在列表的更下方(在此特定示例中为第三)。我已经在[分析]标签中验证,其他任何字段都不会仅带有710
标记化值。
此外,当我搜索710
时,我什至获得这么多结果的唯一方法是在查询时在文本周围添加通配符(例如*710*
)。如果没有,我得到的唯一项目就是特定的匹配项(710 mA Loop Valve Tester
)。但是,如here所述,使用类似这样的通配符会绕过针对目标字段配置的所有模式的过滤器。
作为参考,这是我来自schema.xml
的字段配置:
<fieldType name="text" class="solr.TextField" positionIncrementGap="100">
<analyzer type="index">
<charFilter class="solr.HTMLStripCharFilterFactory"/>
<charFilter class="solr.MappingCharFilterFactory" mapping="mapping-ISOLatin1Accent.txt"/>
<tokenizer class="solr.WhitespaceTokenizerFactory"/>
<filter class="solr.StopFilterFactory" ignoreCase="true" words="stopwords.txt" />
<filter class="solr.WordDelimiterFilterFactory"
protected="protwords.txt"
generateWordParts="1"
generateNumberParts="1"
catenateWords="1"
catenateNumbers="1"
catenateAll="0"
splitOnCaseChange="1"
preserveOriginal="1"/>
<filter class="solr.LengthFilterFactory" min="2" max="100" />
<filter class="solr.LowerCaseFilterFactory"/>
<!-- <filter class="solr.SnowballPorterFilterFactory" language="English" protected="protwords.txt"/> -->
<filter class="solr.RemoveDuplicatesTokenFilterFactory"/>
</analyzer>
<analyzer type="query">
<charFilter class="solr.MappingCharFilterFactory" mapping="mapping-ISOLatin1Accent.txt"/>
<tokenizer class="solr.WhitespaceTokenizerFactory"/>
<filter class="solr.StopFilterFactory" ignoreCase="true" words="stopwords.txt"/>
<filter class="solr.SynonymFilterFactory" synonyms="synonyms.txt" ignoreCase="true" expand="false" tokenizerFactory="solr.WhitespaceTokenizerFactory" />
<filter class="solr.WordDelimiterFilterFactory"
protected="protwords.txt"
generateWordParts="1"
generateNumberParts="1"
catenateWords="1"
catenateNumbers="1"
catenateAll="0"
splitOnCaseChange="0"
preserveOriginal="1"/>
<filter class="solr.LengthFilterFactory" min="2" max="100" />
<filter class="solr.LowerCaseFilterFactory"/>
<!-- <filter class="solr.SnowballPorterFilterFactory" language="English" protected="protwords.txt"/> -->
<filter class="solr.RemoveDuplicatesTokenFilterFactory"/>
</analyzer>
</fieldType>
我需要在分析器(或查询)中进行哪些更改才能返回所需的结果?