Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/search/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/sql-server-2005/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Elasticsearch查询词组合顺序_Search_<img Src="//i.stack.imgur.com/RUiNP.png" Height="16" Width="18" Alt="" Class="sponsor Tag Img">elasticsearch_Combinations_Combinatorics - Fatal编程技术网 elasticsearch,combinations,combinatorics,Search,elasticsearch,Combinations,Combinatorics" /> elasticsearch,combinations,combinatorics,Search,elasticsearch,Combinations,Combinatorics" />

Elasticsearch查询词组合顺序

Elasticsearch查询词组合顺序,search,elasticsearch,combinations,combinatorics,Search,elasticsearch,Combinations,Combinatorics,在elasticsearch中,我搜索一些标记,并将它们从最匹配到最不匹配进行排序。没关系 然而,我的问题是关于相等匹配情况的顺序 例如: 我存储了这些标签:“tag1”、“tag2”、“tag3”、“tag4”、“tag5” 我存储了这些标签:“tag6”,“tag1” 我存储了这些标签:“tag4”、“tag3”、“tag1” 我存储了这些标签:“tag2”、“tag1”、“tag5”、“tag7” 我的搜索查询: { "query" : { "bool" : {

在elasticsearch中,我搜索一些标记,并将它们从最匹配到最不匹配进行排序。没关系

然而,我的问题是关于相等匹配情况的顺序

例如:

  • 我存储了这些标签:“tag1”、“tag2”、“tag3”、“tag4”、“tag5”
  • 我存储了这些标签:“tag6”,“tag1”
  • 我存储了这些标签:“tag4”、“tag3”、“tag1”
  • 我存储了这些标签:“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 
    }
    
    它返回:

  • “tag6”、“tag1”
  • “tag1”、“tag2”、“tag3”、“tag4”、“tag5”
  • “tag4”、“tag3”、“tag1”

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

    我从中找到了解决问题的方法

    我使用“函数评分”进行过滤查询,并添加了“函数”和“评分模式”。除此之外,我在“函数”中为每个标记指定了“权重”

    查询首先返回tag4s,然后返回包含行的tag6:

  • “tag1”、“tag2”、“tag3”、“tag4”、“tag5”
  • “tag4”、“tag3”、“tag1”
  • “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 
    }
    

    您在查询中提供的术语顺序与匹配文档的分数无关。在您的案例中,这3个文档的顺序完全取决于“my_topTime”。顺便说一下,“my_topTime”字段值都是相等的。可以忽略它。