看起来Elasticsearch没有将字段分析器用于使用查询字符串进行多字段搜索,而不指定字段。 这可以配置为索引还是在查询中指定?
这是一个动手实例。
来自commit(spring-data-elasticsearch)的文件。
有一个测试SynonymRepositoryTests
,会通过QueryBuilders.queryStringQuery("text:british")
和QueryBuilders.queryStringQuery("british").analyzer("synonym_analyzer")
次查询。
是否可以使用QueryBuilders.queryStringQuery("british")
查询进行传递,而无需为查询指定字段和分析器?
答案 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 ,然后它就可以正常工作。