匹配搜索词既作为令牌完全匹配,又作为字符串的一部分

时间:2019-01-23 19:26:02

标签: sorting search solr

我遇到一个问题,当我搜索作为文本字段值一部分的术语时,似乎无法获得完整的结果列表。我想要的是: 1)如果字段中的术语和标记化值之间存在完全匹配,我希望该结果首先显示。 2)我还想返回在标题中其他位置具有搜索词的结果,无论它是整体匹配还是整体匹配。

例如,如果我在索引中对此字段具有以下值:

  • 校准6102/7102/7103微浴
  • 校准6109A / 7109A便携式校准槽
  • 710 mA回路阀测试仪
  • VR1710单相电能质量记录仪和电压记录仪

,有人使用搜索词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>

我需要在分析器(或查询)中进行哪些更改才能返回所需的结果?

0 个答案:

没有答案