如何提高elasticsearch中的搜索相关性顺序?

时间:2016-05-21 08:01:36

标签: search elasticsearch lucene match

我有一个名为title的字段,其值如下所示

  1. apple iphone 6s
  2. apple iphone 6
  3. apple iphone 6s plus
  4. apple iphone
  5. apple iphone 5s
  6. 因此,如果用户搜索

      苹果iphone 6

    然后它应该按照

    的顺序出现
      

    2> 1> 3> 4> 5

    。 如果用户搜索

      

    apple iphone 6s

    它应按顺序排列

      

    1> 3> 2> 4> 5。

    如何使用elasticsearch完成此操作。

    我使用了multi_search和all。但没有帮助。

    首先应该完全匹配订单,然后是前缀。然后短语然后字段包含所有3个术语,然后字段包含2个术语,然后字段包含1个术语,依此类推。

    感谢您的帮助。

3 个答案:

答案 0 :(得分:0)

您可以尝试:

{
  "query": {
    "bool":{
      "should":[
        {"match_phrase":{"title":"apple iphone 6s"}},
        {"match_phrase_prefix":{"title":"apple iphone 6s"}}
      ]
    }
  }
}

如果您想要所有包含“iphone”和“apple”的数据,则应为搜索中的每个单词添加match_phrase_prefix

答案 1 :(得分:0)

如果您想按照您指定的顺序获得结果,则需要进行此类查询:

POST /phone/phone/_search
{
   "query": {
      "bool": {
         "should": [                
            {
               "match_phrase_prefix": {
                  "text": "apple iphone 6"
               }
            },
            {
               "match": {
                  "text": "apple iphone 6"
               }
            }
         ]
      }
   }
}

搜索查询字符串" apple iphone 6"和结果顺序:

  1. apple iphone 6
  2. apple iphone 6s
  3. apple iphone 6s plus
  4. apple iphone
  5. apple iphone 5s

答案 2 :(得分:0)

我在下面这样做。它以我想要的预期方式给我结果。

{
    "query": {
        "filtered": {
            "query": {
                "bool": {
                    "should": [{
                        "multi_match": {
                            "query": "apple iphone 6",
                            "fields": ["title"],
                            "operator": "and",
                            "boost": 1
                        }
                    }, {
                        "multi_match": {
                            "query": "apple iphone 6",
                            "fields": ["title"],
                            "type": "phrase_prefix",
                            "boost": 2
                        }
                    }, {
                        "multi_match": {
                            "query": "apple iphone 6",
                            "fields": ["title"],
                            "type": "phrase",
                            "boost": 3
                        }
                    }]
                }
            }
        }
    }
}