【问题标题】:Multi-field search for synonym in the query string多字段搜索查询字符串中的同义词
【发布时间】:2016-10-29 12:54:20
【问题描述】:

看起来 Elasticsearch 没有将字段分析器考虑到使用查询字符串进行多字段搜索,而没有指定字段。 这可以为索引配置或在查询中指定吗?

这是一个动手示例。

给定来自commit (spring-data-elasticsearch) 的文件。
有一个测试SynonymRepositoryTests,它将通过QueryBuilders.queryStringQuery("text:british") 和QueryBuilders.queryStringQuery("british").analyzer("synonym_analyzer") 查询。

是否可以通过QueryBuilders.queryStringQuery("british") 查询使其传递,而无需指定查询的字段和分析器?

【问题讨论】:

  • 是否要将synonym_analyzer 应用于所有字段?
  • 不,我对不同的字段有不同的分析器,并希望通过简单的查询字符串来搜索它们

标签: elasticsearch spring-data-elasticsearch


【解决方案1】:

您可以在不指定字段或分析器的情况下进行查询。默认情况下query string query 将查询_all 字段,该字段是所有字段的组合并使用standard analyzer。所以QueryBuilders.queryStringQuery("british") 会起作用。

您可以在创建索引时从所有字段中exclude 一些字段,还可以借助copy_to 功能创建自定义所有字段。

更新

在创建索引时,您必须在 _all 字段上使用 自定义分析器。

PUT text_index
{
  "settings": {
    "analysis": {
      "filter": {
        "edge_filter": {
          "type": "edge_ngram",
          "min_gram": 1,
          "max_gram": 10
        }
      },
      "analyzer": {
        "prefix_analyzer": {
          "tokenizer": "standard",
          "filter": [
            "lowercase",
            "trim",
            "edge_filter"
          ]
        }
      }
    }
  },
  "mappings": {
    "test_type": {
      "_all": {
        "enabled": true,
        "analyzer": "prefix_analyzer"  <---- your synonym analyzer
      },
      "properties": {
        "name": {
          "type": "string"
        },
        "tag": {
          "type": "string",
          "analyzer": "simple"
        }
      }
    }
  }
}

您可以将 prefix_analyzer 替换为您的 synonym_analyzer,然后它应该可以工作了。

【讨论】:

  • 它不起作用,因为british 是english 的同义词,在字段分析器中定义
  • 我看到了问题,我已经更新了我的答案,如果它不起作用,请告诉我。
  • 感谢您提供帮助,但此配置意味着,同义词分析器将应用于所有字段,但我希望分析器按照每个字段特别配置的方式工作,并且能够搜索所有这些都在一个查询中
  • 不是所有字段,只有_all字段,你还是可以根据自己的分析器查询其他字段
  • 如你所说,_all 字段是所有字段的组合,所以现在同义词分析器将应用于其所有内容,对吗?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2023-03-26
  • 1970-01-01
  • 1970-01-01
  • 2018-10-19
  • 1970-01-01
  • 2015-03-08
  • 1970-01-01
相关资源
最近更新 更多