首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >弹性搜索DSL滤波器

弹性搜索DSL滤波器
EN

Stack Overflow用户
提问于 2020-03-12 06:48:14
回答 2查看 1.3K关注 0票数 1

我的弹性搜索过滤器有问题。我试图使用弹性搜索DSL过滤器搜索文本,但我面临排序问题。

搜索文本:hello world

文档中的其他字符串:你好那里,你好世界,你好大家好,嗨你好等等。

Elasticsearch-dsl查询是:

代码语言:javascript
复制
MyDocument.search().filter(Q("match", title="hello world") | Q("match", original_title="hello world")).execute()

Elasticsearch查询如下:

代码语言:javascript
复制
{
    'bool': {
        'filter': [{
            'bool': {
                'should': [{
                    'match': {
                        'title': 'hello world'
                    }
                }, {
                    'match': {
                        'original_title': 'hello world'
                    }
                }]
            }
        }]
    }
}

输出就像你好大家好,嗨你好,你好世界等等。

但我要你好世界第一。

提前感谢!

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2020-03-12 07:27:33

从查询中可以看出,您希望从多个字段中搜索相同的令牌/令牌。

当然@jaspreet提到了您想要的答案,但是如果您想简化查询(当然,Bool查询也很简单),那么您可以使用字符串,如下所示:

代码语言:javascript
复制
POST <your_index_name>/_search
{
  "query": {
    "query_string": {
      "fields": ["title", "original_title"], 
      "query": "hello world",
      "default_operator": "OR"
    }
  }
}

您还可以使用多匹配查询简化查询,如下所示:

代码语言:javascript
复制
POST <your_index_name>/_search
{
  "query": {
    "bool": {
      "must": [
        {
          "multi_match": {
            "query": "hello world",
            "fields": ["title", "original_title"],
            "operator": "OR"
          }
        }
      ]
    }
  }
}

在这两个用例中,您都会得到所需的结果。

当然,您需要测试它,看看响应是如何出现的,以及使用这些方法可以解决哪些用例。

备注:只是基于@Val的注释的附加注释,如果输入来自用户,则还可以使用简单查询字符串而不是query_string,这与query_string不同的是,它不会因为语法无效而引发任何错误。

希望这能有所帮助!

票数 1
EN

Stack Overflow用户

发布于 2020-03-12 07:06:06

在查询中,您使用的是“筛选器”。

filter参数指示筛选器上下文。其匹配子句用于筛选器上下文。它们将筛选出不匹配的文档,但不会影响匹配文档的得分。

如果您将在返回的点击中检查_score,它将为零。

将查询替换为

代码语言:javascript
复制
{
  "query": {
    "bool": {
      "should": [
        {
          "match": {
            "title": "hello world"
          }
        },
        {
          "match": {
            "original_title": "hello world"
          }
        }
      ]
    }
  }
}

在弹性搜索中,"hello world"将比"hello everyone,hi hello,hello world“中的得分更高。

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

https://stackoverflow.com/questions/60648909

复制
相关文章

相似问题

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