当前位置: 首页 > 知识库问答 >
问题:

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

祁俊喆
2023-03-14

在ElasticSearch7.x中,我使用一个具有同义词过滤器的分析器对数据字段进行了索引。但是,为了支持增强“完全”匹配数据字段中的查询词的查询,而不是匹配数据中的同义词的查询,我将使用search_analyzer

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

似乎ElasticSearch不允许multi-match查询中的search_analyzer。有哪些可供选择的方案?对于我的高级解决方案(将确切的单词增强到同义词之上),或者当我以不同的增强(重要性权重)在不同的字段中搜索时合并search_analyzer

PS:我不想重新索引数据字段,一个有同义词分析器,另一个没有。

共有1个答案

袁华清
2023-03-14

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

{
    "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,则可以在查询时间强制使用特定的分析器,将analyzerparam放入查询:

{
  "query": {
    "multi_match" : {
      "query":      "bread cereal",
      "analyzer" : "standard",
      "type":       "cross_fields",
      "fields": [
        "description",
        "content"
      ],
      "operator":   "and" 
    }
  }
}
 类似资料:
  • 我是弹性出版社的新手,在Wordpress多网络站点上遇到了一些问题,在尝试执行WP-Query时遇到了这个异常: 由:SearchParseException[未能解析搜索源[{“from”:0,“size”:3,“sort”:[{“_score”:{“order”:“desc”}}],“query”:{“bool”:{“shoul”:[{“multi_match”:{“query”:“test

  • 我在Elasticsearch中有一个查询,我希望在多个字段上进行匹配以获得恒定分数 但我得到以下错误: "[constant_score]查询不支持[multi_match]",

  • 我已经检查了我正在使用所有最新的NuGet库版本。有人能给我提示一下还有什么要查吗?这是代码:

  • 这里是我的问题:我从amazon dynamodb api中读到,for query中的条件意味着检查列表*中的匹配元素,但为什么它返回错误:*查询键条件不受支持? aws dynamodb查询--表名Music--关键条件{“艺术家”:{“AttributeValueList”:[{“S”:“Wangdong”}、{“S”:“Acme Band”}]、“ComparisonOperator”:“

  • 我正在尝试查询我的dynamodb表以获取提要\u guid和状态\u id=1。但它返回查询键条件不受支持的错误。请查找我的表架构和查询。 以下是我更新该表的查询。

  • 我需要帮助来完成Woocommerce产品列表的SQL查询。我需要将其用于WPDataTableSQL输入。 我搜索了一个示例代码,并修改了找到的代码: 它可以工作,但没有可变产品的产品行。它只显示产品的主要变化。 产品牛排:我有6种不同的牛排作为自己的产品,价格不同,重量也不同。通过我的SQL查询,我只能看到主产品“牛排”,没有变化和变化价格。 表wp_员额 表wp_Posteta- wp_术语