簡體   English   中英

Elasticsearch查詢詞組合順序

[英]Elasticsearch Query Terms Combination Order

在elasticsearch中,我搜索一些標簽並將它們從最匹配到最不匹配進行排序。 沒關系。

但是,我的問題是關於相等匹配情況的順序。

例如:

  1. 我存儲了以下標簽:“ tag1”,“ tag2”,“ tag3”,“ tag4”,“ tag5”
  2. 我存儲了以下標簽:“ tag6”,“ tag1”
  3. 我存儲了以下標簽:“ tag4”,“ tag3”,“ tag1”
  4. 我存儲了以下標簽:“ tag2”,“ tag1”,“ tag5”,“ tag7”

我的搜索查詢:

{
    "query" : { 
        "bool" : { 
            "must" : [ 
                { 
                    "terms" : { 
                        "my_field" : ["tag4", "tag6"],
                        minimum_should_match : 1
                    } 
                }, 
                {"term" : {"my_cityId" : 1}}, 
                {"term" : {"my_townId" : 8}} 
            ] 
        } 
    }, 
    "sort" : [ 
        {"_score" : "desc"}, 
        {"my_topTime" : "asc"} 
    ], 
    "from" : 0, 
    "size" : 5 
}

它返回:

  1. “ tag6”,“ tag1”
  2. “標簽1”,“標簽2”,“標簽3”,“標簽4”,“標簽5”
  3. “ tag4”,“ tag3”,“ tag1”

我的搜索順序是tag4,然后是tag6。 如何返回tag4首先包含行,tag6之后包含行?

我從增強過濾子集中找到了解決問題的方法

我在過濾器查詢中使用了“ function_score”,並添加了“ functions”和“ score_mode”。 除此之外,我為“功能”中的每個標簽指定了“重量”。

該查詢首先返回tag4s,然后tag6包含以下行:

  1. “標簽1”,“標簽2”,“標簽3”,“標簽4”,“標簽5”
  2. “ tag4”,“ tag3”,“ tag1”
  3. “ tag6”,“ tag1”

我的新查詢:

{
    "query" : { 
        "function_score" : { 
            "filter" : { 
                "query" : { 
                    "bool" : { 
                        "must" : [
                            { 
                                "terms" : { 
                                    "my_field" : ["tag4", "tag6"],                                          
                                    minimum_should_match : 1
                                } 
                            } , 
                            {"term" : {"my_cityId" : 1}}, 
                            {"term" : {"my_townId" : 8}} 
                        ] 
                    } 
                } 
            }, 
            "functions" : [ 
                {"filter" : {"term" : { "my_field" : "tag4" }}, "weight" : 2},
                {"filter" : { "term" : { "my_field" : "tag6" }}, "weight" : 1} 
            ], 
            "score_mode": "sum" 
        } 
    }, 
    "sort" : [ 
        {"_score" : "desc"}, 
        {"my_topTime" : "asc"} 
    ], 
    "from" : 0, 
    "size" : 5 
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM