java 在ElasticSearch中,使用'match'匹配关键字类型的字段,使用'term'匹配文本类型的字段,ES是做什么的?

im9ewurl  于 2023-08-01  发布在  Java
关注(0)|答案(1)|浏览(108)
# 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将使用'标准'单词分隔符来分割输入,然后匹配关键字的倒排索引,结果集将为空。

wn9m85ua

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。
进一步阅读:

相关问题