看起来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/