【问题标题】:Exact word not boosting much Solr确切的词对 Solr 没有太大的推动作用
【发布时间】:2015-06-09 12:14:15
【问题描述】:

作为给定链接中的参考

https://wiki.apache.org/solr/SolrRelevancyFAQ#How_can_I_make_exact-case_matches_score_higher

我尝试了一个例子。我的 schema.xml 配置如下。

     <field name="product_name" type="text_wslc" indexed="true" stored="true" required="true" multiValued="false"/>
        <field name="nameString" type="string_ci" indexed="true" stored="false" required="true" />
                <copyField source="product_name" dest="nameString"/>

<fieldType name="string" class="solr.StrField" sortMissingLast="true" omitNorms="true"/>
                <fieldType name="long" class="solr.TrieLongField" precisionStep="0" omitNorms="true" positionIncrementGap="0" />
                <fieldType name="text_wslc" class="solr.TextField" positionIncrementGap="100">
                        <analyzer type="index">
                                  <tokenizer class="solr.WhitespaceTokenizerFactory"/>
                        <filter class="solr.SynonymFilterFactory" synonyms="synonyms.txt" ignoreCase="true" expand="true"/>
                        <filter class="solr.WordDelimiterFilterFactory"
                             generateWordParts="1"
                             generateNumberParts="1"
                             catenateWords="1"
                             catenateNumbers="1"
                             catenateAll="1"
                             preserveOriginal="1"
                             />
                <filter class="solr.LowerCaseFilterFactory"/>
                <filter class="solr.SnowballPorterFilterFactory" language="English" />
                <filter class="solr.PorterStemFilterFactory"/>
                <filter class="solr.KStemFilterFactory"/>
                <filter class="solr.EnglishMinimalStemFilterFactory"/>
                        </analyzer>
                        <analyzer type="query">
                                <tokenizer class="solr.WhitespaceTokenizerFactory"/>
                <filter class="solr.WordDelimiterFilterFactory"
                             generateWordParts="1"
                             generateNumberParts="1"
                             catenateWords="1"
                             catenateNumbers="1"
                             catenateAll="1"
                             preserveOriginal="1"
                             />
                                <filter class="solr.LowerCaseFilterFactory"/>
                <filter class="solr.SnowballPorterFilterFactory" language="English" />
                <filter class="solr.PorterStemFilterFactory"/>
                <filter class="solr.KStemFilterFactory"/>
                <filter class="solr.EnglishMinimalStemFilterFactory"/>
                        </analyzer>
                </fieldType>

<fieldType name="string_ci" class="solr.TextField" tMissingLast="true" omitNorms="true">
            <analyzer type="query">
            <tokenizer class="solr.KeywordTokenizerFactory"/>
            <filter class="solr.LowerCaseFilterFactory"/>
            </analyzer>
        </fieldType>

精确的单词搜索适用于此。

但是使用完全匹配增强的模糊搜索并没有给出预期的结果。 这是我的查询

/select?q=(laptop bag)&defType=dismax&qf=nameString^22+product_name^0.1

有什么帮助吗?

【问题讨论】:

标签: solr lucene edismax dismax solr-boost


【解决方案1】:

你需要这样创建一个新的字段类型...

<fieldType name="string_ci" class="solr.TextField"
    sortMissingLast="true" omitNorms="true">
    <analyzer>
        <tokenizer class="solr.KeywordTokenizerFactory"/>           
        <filter class="solr.LowerCaseFilterFactory" />
    </analyzer>
</fieldType>

现在像这样创建字段nameSrting

<field name="nameSrting" type="string_ci" indexed="true" stored="true"/>

并将product_name的内容复制到nameSrting,如下所示:

<copyField source="product_name" dest="nameSrting"/>

现在您需要运行一个查询,指定您想使用这样的双引号获取准确的短语:

http://localhost:8983/solr/Dummy2/select?q="laptop+bag"&wt=json&defType=dismax&qf= nameSrting^222+product_name^0.1

【讨论】:

猜你喜欢
  • 1970-01-01
  • 2021-02-14
  • 1970-01-01
  • 2011-02-10
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多