elasticsearch6.6文档翻译-查询语句-词条查询-词查询

Term Query {#query-dsl-term-query}

term 查询查找和倒排索引中的词 精确 匹配的文档。例如:

POST _search
{
  "query": {
    "term" : { "user" : "Kimchy" } 
  }
}
  • user 字段的倒排索引中查找和词 Kimchy 精确匹配的文档。

可以指定 boost 参数以使这个 term 查询比另一个 term 查询获得更高的相关性分数,例如:

GET _search
{
  "query": {
    "bool": {
      "should": [
        {
          "term": {
            "status": {
              "value": "urgent",
              "boost": 2.0 
            }
          }
        },
        {
          "term": {
            "status": "normal" 
          }
        }
      ]
    }
  }
}
  • urgent 查询子句权重 2.0,意味着它比 normal 查询子句重要两倍。

  • normal 子句默认权重 1.0

term 查询也可以和 range data types 搭配。

字符串字段可以是 text (全文本,如电子邮件的正文),或者 keyword(精确值,如电子邮件地址或者邮政编码)。精确的值(如数字,日期和关键字)会被添加到字段的倒排索引中,以使其可搜索。

但是, text 字段会被 分析。这意味着他们的值首先通过 分析器 生成一个词列表, 然后这些词被添加到倒排索引中。

分析文本的方式有很多种:默认的 标准分析器会丢弃大多数标点符号,将文本分解为单个单词,并将其小写。例如,standard 分析器会把字符串 `Quick Brown Fox!'' 分解成 [`quick,brown, fox]。

这个分析过程使得在一大块全文本中搜索单个单词成为可能。

term 查询在字段的倒排索引中查找 精确 匹配的词 — 它对于字段的分析器一无所知。这使得在关键字字段或者数字字段或者日期字段中查找值非常有用。查询全文本字段时,使用 match 查询,它理解字段是怎么被分析的。

要演示,请尝试下面的示例。首先,创建索引,指定字段的映射,并索引文档:

PUT my_index
{
  "mappings": {
    "_doc": {
      "properties": {
        "full_text": {
          "type":  "text" 
        },
        "exact_value": {
          "type":  "keyword" 
        }
      }
    }
  }
}

PUT my_index/_doc/1
{
  "full_text":   "Quick Foxes!", 
  "exact_value": "Quick Foxes!"  
}
  • full_text 字段是 text 类型,会被分析。

  • exact_value 字段是 keyword 类型,不会被分析。

  • full_text 倒排索引包含词: [quick, foxes]。

  • exact_value 倒排索引包含词: [Quick Foxes!]。

现在,对比 term 查询和 match 查询的结果:

GET my_index/_search
{
  "query": {
    "term": {
      "exact_value": "Quick Foxes!" 
    }
  }
}

GET my_index/_search
{
  "query": {
    "term": {
      "full_text": "Quick Foxes!" 
    }
  }
}

GET my_index/_search
{
  "query": {
    "term": {
      "full_text": "foxes" 
    }
  }
}

GET my_index/_search
{
  "query": {
    "match": {
      "full_text": "Quick Foxes!" 
    }
  }
}
  • 这个查询匹配到文档是因为 exact_value 字段的倒排索引中包含词
    Quick Foxes!

  • 这个查询不能匹配到文档,因为 full_text 字段的倒排索引中只包含词
    quickfoxes。不包含词 Quick Foxes!

  • full_text 字段上,对词 foxesterm 查询,能匹配到文档。

  • full_text 字段上做 match
    查询,首先会分析查询字符串,然后查找包含 quick 或者 foxes
    或者这两个词都包含的文档。

发布了19 篇原创文章 · 获赞 16 · 访问量 6万+

猜你喜欢

转载自blog.csdn.net/matt8/article/details/88416270
今日推荐