# Create a DSL statement for the index library
PUT /mytest
{
"mappings": {
"properties": {
"someText1": {
"type": "text"
},
"someText2": {
"type": "keyword"
}
}
}
}
# Add a piece of data
POST /mytest/_doc/1
{
"someText1": "Hello World",
"someText2": "Hello World"
}
# Use 'term' to match a field of type text, and the query result is empty
GET /mytest/_search
{
"query": {
"term": {
"someText1": "Hello World"
}
}
}
# Use 'match' to match a field of type keyword. The query result has the above data
GET /mytest/_search
{
"query": {
"match": {
"someText2": "Hello World"
}
}
}
字符串
请问ES如何执行这两个查询?
我会想,如果我使用'match'来匹配关键字类型的字段,match将使用'标准'单词分隔符来分割输入,然后匹配关键字的倒排索引,结果集将为空。
1条答案
按热度按时间wn9m85ua1#
在elasticsearch中:
*Term是精确查询
*Match是通过文本分析器传递的查询。
用过于简单的术语解释:
因此术语查询将仅匹配“Hello World”而不匹配“Hello world”、“Hello world”、“HeLLo WoRlD”等。然而匹配查询将匹配所有这些,并且模糊性甚至可以匹配拼写错误或类似的单词。
注意:Elastic search添加了一个名为
Avoid using the term query for text fields.
的警告Thumb规则是使用术语查询精确匹配,例如标签或电子邮件ID等。
因此,对于您的示例,使用术语查询字段的关键字类型是someText2。
进一步阅读: