elasticsearch - 多字段搜索查询字符串中的同义词

标签 elasticsearch spring-data-elasticsearch

看起来Elasticsearch在没有指定字段的情况下使用查询字符串进行多字段搜索时并未考虑字段分析器。
可以将其配置为索引或在查询中指定吗?

这是一个动手的例子。

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

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

最佳答案

您可以查询而无需指定字段或分析器。默认情况下,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"
        }
      }
    }
  }
}

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

关于elasticsearch - 多字段搜索查询字符串中的同义词,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40319291/

相关文章:

php - 使用elasticsearch,如何为包含数组的文档创建索引,并在将来追加到该数组

elasticsearch - 文件节拍 : Send different logs from filebeat to different logstash Pipeline

elasticsearch - Spring Data ElasticSearch-无法连接到节点

java - 我们可以避免将所有字段都映射到springdata中用于Elasticsearch的实体类,因为json文档中有100多个字段吗?

elasticsearch - 通过了两项测试,但是Elasticsearch仅显示第一个测试的结果

java - 其余高级客户端 : Request timeout is not working

elasticsearch - ElasticSearch过滤所需的多个字段

elasticsearch - AWS ELK - SAML SSO 在浏览器中有效,但在 iFrame 中无效

java - 使用spring数据的ElasticSearchTemplate时,是否可以指定写一致性级别?

spring-boot - java中可用于 Elasticsearch 的不同客户端有哪些?