Solr完全匹配提升减少结果

时间:2015-06-11 10:41:24

标签: solr lucene solrj solr-query-syntax solr-boost

我有两个字段,一个是复制字段。

  1. <field name="product_name" type="text_wslc" indexed="true" stored="true" required="true" multiValued="false"/>

  2. <field name="dummy_name" type="string_ci" indexed="true" stored="false" required="true" />

  3.                         

    其定义见下文

    <fieldType name="text_wslc" class="solr.TextField" sortMissingLast="true" omitNorms="true">
    <analyzer type="query">
    <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"
                                     />
    
        <filterclass="solr.LowerCaseFilterFactory"/>
    <filter class="solr.SnowballPorterFilterFactory" language="English" />
                        <filter class="solr.PorterStemFilterFactory"/>
                        <filter class="solr.KStemFilterFactory"/>
                        <filter class="solr.EnglishMinimalStemFilterFactory"/>
                                </analyzer>
    
    
        <fieldType name="string_ci" class="solr.TextField" sortMissingLast="true" omitNorms="true">
              <analyzer type="query">
            <tokenizer class="solr.KeywordTokenizerFactory"/>
                <filter class="solr.LowerCaseFilterFactory"/>
                <filter class="solr.SnowballPorterFilterFactory" language="English" />
                <filter class="solr.KStemFilterFactory"/>
                <filter class="solr.EnglishMinimalStemFilterFactory"/>
            </analyzer>
        </fieldType>
    

    复制文件是首先获得完全匹配的结果。 我的查询是这样的

    /选择Q =( “膝上型+袋”)及DF = PRODUCT_NAME&安培; DEFTYPE = edismax&安培; QF = dummy_name ^ 20000 + PRODUCT_NAME ^ 0.01

    它给了我大约8000个结果

    但实际结果约为20000

     /select?q=(laptop+bag)&df=product_name&defType=edismax&qf=dummy_name^20000+product_name^0.01 
    

    但它不会首先列出确切的结果。 我该如何解决这个问题? 我的查询有问题吗? 这是我的字段和定义

1 个答案:

答案 0 :(得分:1)

你有几件事情在这里发生。

首先,搜索&#34;笔记本电脑包&#34;和笔记本电脑包是两个不同的东西,这就是为什么你得到不同的结果。第一个将搜索确切的短语,而后者将找到任何关键字。因此,当您在搜索查询周围有引号时,看到较少的结果是有道理的。

其次,我认为你对string_ci字段的字段定义需要稍微调整一下,你的干扰意图在这一点上对我来说有点神秘。此外,请确保该字段的索引设置和查询设置相对类似。使用Solr Admin UI Analyzer调整字段并查看更改如何影响数据输入/输出。

最后,您发布的最后一个字段配置没有字段标签。总的来说,很难说具体问题在哪里。我建议从运行一些查询并将debug设置为true开始,看看如何评估相关性。我敢打赌,你的字符串字段的索引和查询参数是不一致的。如果是这样,您可以在管理UI分析器中验证这一点。

祝你好运。