2017-07-07 106 views
0

我正在使用弹性搜索版本2.x。我有两个记录被索引为:弹性搜索排序和排名

  1. 卫生间的墙面瓷砖(如“昵称”索引的文档列)
  2. 瓷砖墙浴室(如“昵称”索引的文档列)

当我试图搜索短语“瓷砖墙浴室”理想情况下,第二个应该先出现,因为这是完全匹配,之后将首先出现,因为所有3个单词匹配(瓷砖,墙壁和浴室)。

我把排序在我的查询基于列。下面是我的弹性搜索查询:

{ 
          "query" : { 
           "filtered" : { 
             "query" : { 
              "query_string": { 
               "query": "*tile wall bathroom*", 
               "fields": [ 
                "nickname", 
                "comments", 
                "category_name", 
                "subcategory_name", 
                "document_name", 
                "web_links", 
                "document_extension", 
                "property_name", 
                "document_content" 
               ],              
               "analyze_wildcard": true 
              } 
             }, 
             "filter" : { 
              "and" : [ 
                {"term" : {"property_id" : "6"}} 
              ] 
             } 
           } 
          }, 
          "size": 10, 
          "sort": ["nickname", "comments", "web_links", "document_name"] 
        } 

仅供参考,请附上图片。 enter image description here

在此先感谢!

回答

1

由于两个文档字段都由“卫生间”,“瓷砖”和“墙”组成,因此您的3项全部命中。所以通常将这两个文档检索为匹配。正如你所建议的,一般来说,当按照分数​​排序时,第一个文档应该比第二个文档的排名高。

因为你的第一个排序字段是“绰号” - 场,你得到这个结果集,其中首先所有文件按字母顺序排序在他们的“昵称” -fields(b在“浴室墙砖”的由来之前t“瓷砖墙卫生间”等)。 这不包括根据您的搜索要求的相关度排序。您可以使用“昵称”作为第二排序参数,而将“_score”字段作为第一个排序参数。

您不妨使用Elasticsearch-explain功能检查您的查询。

干杯,多米尼克

编辑:请尝试对Elasticsearch- Explain-API,使以了解你的结果已经计算运行查询。此外,您可以针对您的数据运行匹配查询,以查看您的结果是否改善了对“query_string”的使用。因此,您也可以省略排序参数,仅根据相关性分数对结果进行排序。

{ 
    "query": { 
     "match": { 
      "nickname": "tile wall bathroom" 
     }, 
     "size": 10, 
     "sort": ["_score", "nickname", "comments", "web_links", "document_name"] 
    } 
} 
+0

谢谢多米尼克。你可以写我询问你的解释。我试图首先放置“_scrore”字段,但它显示相同的结果。 –

+0

感谢Chocomesli。但是这个查询根本不起作用。 –

+0

您是否尝试了Explain-API? – chocomuesli