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

时间:2016-10-29 12:54:20

标签: elasticsearch spring-data-elasticsearch

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

这是一个动手实例。

来自commitspring-data-elasticsearch)的文件。
有一个测试SynonymRepositoryTests,会通过QueryBuilders.queryStringQuery("text:british")QueryBuilders.queryStringQuery("british").analyzer("synonym_analyzer")次查询。

是否可以使用QueryBuilders.queryStringQuery("british")查询进行传递,而无需为查询指定字段和分析器?

1 个答案:

答案 0 :(得分: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"
        }
      }
    }
  }
}

您可以使用 synonym_analyzer 替换 prefix_analyzer ,然后它就可以正常工作。

相关问题