在搜索时保留位置



我需要使elasticsearch查询与多个单词一起工作。我使用edgeNgram tokenizer来支持自动补全功能,我使用query_string进行搜索。

文档

{
   "title":"Gold digital cinema",
   "region":"Mumbai"
}
{
  "title":"cine park",
  "region":"Mumbai"
}
{
  "title":"Premier Gold",
  "region":"mumbai"
}
查询

{
  "query": {
  "bool": {
    "should": [
               {
                 "query_string": {
                     "fields": [
                                "title",
                                "region"
                           ],
                    "query":"gold cine"
                  }
               },
               {
                "fuzzy": {  
                  "title": {
                            "value":"gold cine",
                            "min_similarity": 0.5,
                            "max_expansions": 50,
                            "prefix_length": 0
                           }
                         }
               }
             ]
          }
       }
}

当我搜索黄金电影时,我需要"title":"Gold digital cinema"在最上面的结果中。但我得到"title":"cine park""title":"Premier Gold"在顶部。

在搜索时是否有保留位置的方法?提前谢谢。

{
    "query":{
        "bool":{
            "should":[{
               "query_string":{
                "fields":["title.default_title^10",
                            "title.ngrams_front^2",
                             "title.ngrams_back"],
                                "query":"gold cine",
                                 "boost":2  
                               }
                      },
    { 
        "function_score":{
                   "query":{
                     "query_string":{
                        "fields":["region"],
                        "query":"MUMBAI"
                       }            
                   },
                     "functions":[{
                                    "script_score":{
                                        "script":"_score + 0.6"}    
                                }
                                ],
                                "score_mode":"max",
                                "boost_mode":"avg"
                           }
                      }
                ]
            }
        }
    }

您可以使用boost将数据拉到顶部…

{
"query": {
"bool": {
"should": [
           {
             "query_string": {
                 "fields": [
                            "title",
                            "region"
                       ],
                "query":"gold cine",
                "boost": 3
              }
           },
           {
            "fuzzy": {  
              "title": {
                        "value":"gold cine",
                        "min_similarity": 0.5,
                        "max_expansions": 50,
                        "prefix_length": 0
                       }
                     }
           }
         ]
      }
   }
}

如果您使用1.0.0版本。以上你应该使用函数score query。

希望有帮助…

最新更新