我想在我的elasticsearch索引中的一个字段上同时支持文本搜索(匹配查询)和精确匹配(术语查询)。
下面是我创建的Map:
PUT multi_mapping_test/_mapping
{
"properties": {
"name": {
"type": "text",
"fields": {
"keyword": {
"type": "keyword"
}
}
}
}
}
然而,术语查询的行为并不像我所期望的那样(可能是对它的理解有误)。
例如,下面是几个已编入索引的示例文档:
POST multi_mapping_test/_doc
{
"name": "abc llc"
}
POST multi_mapping_test/_doc
{
"name": "def llc"
}
以下术语查询未产生结果:
GET multi_mapping_test/_search
{
"query": {
"term": {
"name": {
"value": "abc llc"
}
}
}
}
我做错了什么吗?或者我对术语查询精确匹配的理解不正确?
P.S.当我为 only关键字类型放置Map时,术语查询工作正常。
1条答案
按热度按时间kg7wmglp1#
字词查询:返回在提供的字段中包含精确字词的文档。搜索精确匹配时,应使用关键字字段类型。如下所示:
此外,您可以使用bool query在您的ElasticSearch索引中进行文本搜索(匹配查询)和精确匹配(术语查询)。
注:如果需要自动完成特征,也可以使用match_bool_prefix查询。详细信息:https://www.elastic.co/guide/en/elasticsearch/reference/current/query-dsl-match-bool-prefix-query.html
“abc llc”
_score
将高于“def llc”,因为它同时匹配匹配查询和术语查询。