elasticsearch - ElasticSearch:[multi_match]查询不支持[search_analyzer]

标签 elasticsearch elasticsearch-dsl elasticsearch-query

在ElasticSearch 7.x中,我使用具有synonym filter的分析器为数据字段建立了索引。
但是,为了支持增强与数据字段中与同义词匹配的查询词“完全”匹配数据字段中的查询词的查询,我将使用 search_analyzer

为此,对于我要完全匹配的查询,我想提供一个没有同义词过滤器的分析器。这可以通过search_analyzer完成。但是,我的主要查询是 multi_match 查询,用于在所有所需字段(且具有不同的重要性(增强))上搜索这些术语。

似乎ElasticSearch在search_analyzer查询中不允许使用multi-match
有哪些选择?当我在具有不同提升(重要性权重)的不同字段中进行搜索时,要么是为了我的高级解决方案(使确切的单词超出其同义词),要么是为了合并search_analyzer

PS:我不想用同义词分析器重新索引数据字段,而又不用同义词分析器。

最佳答案

Search_analyzer是索引时间的param,因此,如果要为具有同义词的字段设置它:

{
    "settings": {
        "index" : {
            "analysis" : {
                "analyzer" : {
                    "synonym" : {
                        "tokenizer" : "whitespace",
                        "filter" : ["synonym"]
                    }
                },
                "filter" : {
                    "synonym" : {
                        "type" : "synonym",
                        "synonyms_path" : "analysis/synonym.txt"
                    }
                }
            }
        }
    }, "mappings" : {
      "properties" : {
        "description" : {
          "type" : "text",
          "analyzer": "synonym",
          "search_analyzer": "standard"
        },
        "content" : {
          "type" : "text",
          "analyzer": "synonym",
          "search_analyzer": "standard",
          "fields" : {
            "keyword" : {
              "type" : "keyword",
              "ignore_above" : 256
            }
          }
        }
}

这样,您就为查询时间设置了默认的分析器。因此,您现在可以通过这种方式执行multimatch查询:
{
  "query": {
    "multi_match" : {
      "query":      "bread cereal",
      "type":       "cross_fields",
      "fields": [
        "description",
        "content"
      ],
      "operator":   "and" 
    }
  }
}

如果尚未在索引时间为这些字段设置特定的search_analyzer,则在查询时将使用用于指示的同一分析器。如果尚未在索引时间设置search_analyzer,则可以force to use a specific analyzer at query time在查询中添加analyzer参数:
{
  "query": {
    "multi_match" : {
      "query":      "bread cereal",
      "analyzer" : "standard",
      "type":       "cross_fields",
      "fields": [
        "description",
        "content"
      ],
      "operator":   "and" 
    }
  }
}

关于elasticsearch - ElasticSearch:[multi_match]查询不支持[search_analyzer],我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61282157/

相关文章:

elasticsearch - 如何在 Python 中对 Elasticsearch DSL 的结果进行分页

elasticsearch - Elasticsearch日期查询。在某个月出生的人

Elasticsearch 向下搜索 - SearchPhaseExecutionException

php - 查询elasticsearch地理距离邮政编码搜索

elasticsearch - 选择具有相同开始日期和结束日期的文档

autocomplete - 在 elasticsearch 服务器的字段上实现完成建议

Elasticsearch 多索引过滤器

elasticsearch - 类似于SQL的Elastic Query查询

elasticsearch - 获取所有时间date_histogram存储桶结果

elasticsearch - 适用于英国邮政编码的Elasticsearch映射,能够处理间距和大小写