flex 搜索过滤器出现问题。我正在尝试使用 flex 搜索DSL过滤器搜索文本,但是我面临排序问题。

搜索文本:你好世界

文档中的其他字符串:您好,您好,世界,大家好,您好,等等。

Elasticsearch-dsl查询为:

MyDocument.search().filter(Q("match", title="hello world") | Q("match", original_title="hello world")).execute()

Elasticsearch查询是这样的:
{
    'bool': {
        'filter': [{
            'bool': {
                'should': [{
                    'match': {
                        'title': 'hello world'
                    }
                }, {
                    'match': {
                        'original_title': 'hello world'
                    }
                }]
            }
        }]
    }
}

输出类似于大家好,大家好,世界等等。

但我想先你好,世界

提前致谢!

最佳答案

通过查询,您似乎希望从多个字段中搜索相同的 token 。

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

POST <your_index_name>/_search
{
  "query": {
    "query_string": {
      "fields": ["title", "original_title"],
      "query": "hello world",
      "default_operator": "OR"
    }
  }
}

您还可以使用multi-match查询来简化查询,如下所示:
POST <your_index_name>/_search
{
  "query": {
    "bool": {
      "must": [
        {
          "multi_match": {
            "query": "hello world",
            "fields": ["title", "original_title"],
            "operator": "OR"
          }
        }
      ]
    }
  }
}

在这两种用例中,您都将获得期望的结果。

当然,您需要对其进行测试,并查看响应的显示方式以及使用这些响应可以解决的用例。

注意:只是基于@Val的注释的附加注释,如果输入是来自用户的,您也可以使用simple query string代替query_string,这与query_string不同,不会因无效语法而引发任何错误。

希望这可以帮助!

关于python - Elasticsearch DSL过滤器,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/60648909/

10-11 21:18