首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >弹性搜索排序和排序

弹性搜索排序和排序
EN

Stack Overflow用户
提问于 2017-07-07 13:13:03
回答 2查看 2.9K关注 0票数 1

我使用弹性搜索版本2.x。我有两份记录被编入索引:

  1. 浴室墙砖(作为“昵称”索引文件栏)
  2. 瓷砖墙浴室(“昵称”索引文档栏)

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

我根据列在查询中进行排序。下面是我的弹性搜索查询:

代码语言:javascript
复制
{
                          "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"]
                    }

如需参考,请查找附件中的图片。

提前谢谢!

EN

回答 2

Stack Overflow用户

发布于 2017-07-07 14:38:32

所有的三个术语都被击中了,因为这两个文档字段都由“卫浴”、“瓷砖”和“墙”组成。因此,将两个文档检索为hits是很常见的。正如您所建议的,一般来说,当按分数排序时,第一个文档的排名应该高于第二个文档。

因为您的第一个排序字段是“昵称”-field,所以您得到了这个结果集,首先所有文档都在其“昵称”-fields上按字母顺序排序(“卫浴墙瓷砖”中的b先于t“瓷砖墙浴室”等)。这不包括在搜索请求中按相关性评分排序。您可以使用“昵称”作为次要排序参数,而使用"_score"-field作为第一个参数。

您还可以使用Elasticsearch-解释功能检查查询。

干杯,多明尼克

编辑:请尝试对Elasticsearch-解释-API运行您的查询,这使您能够理解结果是如何计算的。此外,您可以对您的数据运行匹配查询,以查看您的结果是否与"query_string“的用法相比有所提高。在此,您还可以省略排序参数,以便只按其相关性评分对结果进行排序。

代码语言:javascript
复制
{
    "query": {
        "match": {
            "nickname": "tile wall bathroom"
        },
        "size": 10,
        "sort": ["_score", "nickname", "comments", "web_links", "document_name"]
    }
}
票数 1
EN

Stack Overflow用户

发布于 2021-07-30 16:15:19

您应该使用带状疱疹。您的用例是专门为其设计的。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/44971679

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档