【问题标题】:solr exact search ignore duplicate phrasesolr 精确搜索忽略重复的短语
【发布时间】:2017-02-01 04:47:17
【问题描述】:

我正在使用 solr 查询从文档中搜索关键字。我希望确切的短语排在首位,但我也希望如果相同的短语在文档中重复多次,那么它应该计为一个,因为那些在文档中多次具有相同短语的关键字排在首位,因为得分很高。

如果我正在搜索“php developer”,请查看下面的结果,找到了两个结果,但得分不同。

根据我们的需要,两者应该具有相同的分数。我想忽略文档中的重复短语。

请同时检查架构文件,搜索“job_title,key_skills,key_skills_admin,job_detail”的“job_search”字段组合

        <copyField source="job_title" dest="job_search"/>
        <copyField source="key_skills" dest="job_search"/>
        <copyField source="key_skills_admin" dest="job_search"/>   
        <copyField source="job_detail" dest="job_search"/> 

        {
        "responseHeader":{
        "status":0,
        "QTime":7,
        "params":{
          "lowercaseOperators":"true",
          "mm":"2",
          "debugQuery":"true",
          "fl":"job_slno,job_title,job_detail,key_skills,key_skills_admin,display_date,score",
          "indent":"true",
          "q":"\"php developer\"",
          "stopwords":"true",
          "wt":"json",
          "defType":"edismax"}},
        "response":{"numFound":110,"start":0,"maxScore":2.518858,"docs":[
          {
            "job_slno":"243681",
            "job_title":"php developer",
            "job_detail":"sdf sdfs df",
            "key_skills":"php developer",
            "key_skills_admin":"php developer",
            "display_date":"2016-11-11T00:00:00Z",
            "score":2.518858},
          {
            "job_slno":"243340",
            "job_title":"sfsdfs",
            "job_detail":"dfsdfsdfsd",
            "key_skills":"PHP Developer",
            "key_skills_admin":"PHP Developer",
            "display_date":"2016-11-13T00:00:00Z",
            "score":2.399412},
          ]
        }

【问题讨论】:

    标签: solr


    【解决方案1】:

    只要你不依赖于标记的位置(比如你不是做词组提升或类似的东西),you can set omitTermFreqAndPositions to true for the field

    这将避免存储有关词频的任何信息,并且只要词频是唯一不同的因素,就本质上使分数相同。

    【讨论】:

    • 非常感谢您的建议;
    • 现在我们已经将 solr 升级到 6.3 版并设置了 omitTermFreqAndPositions="true", omitPositions="true"。现在,当我们搜索超过单个单词的确切短语时,会出现以下错误“msg”:“field \"product_name\" was indexed without position data; cannot run PhraseQuery (phrase=product_name:\"basmati rice\")" , 它适用于单个单词。请帮忙。
    【解决方案2】:

    您可以创建自己的自定义相似性类扩展 DefaultSimilarity。 并根据您的用例覆盖 tf 方法。

    public class CustomSimilarity extends DefaultSimilarity {
    
            //multiple occurrences of terms doesn't affect its relevancy
            @Override
            public float tf(float freq) {
                    return 1;
            }
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2011-11-21
      • 1970-01-01
      • 2011-07-28
      • 2011-02-07
      • 1970-01-01
      • 1970-01-01
      • 2012-08-12
      相关资源
      最近更新 更多