term query与match query区别

素颜马尾好姑娘i 2022-10-08 13:28 233阅读 0赞

term query 词匹配询问

match query 部分匹配询问

match query搜索的时候,首先会解析查询字符串,进行分词,然后查询,而term query,输入的查询内容是什么,就会按照什么去查询,并不会解析查询内容,对它分词

官方文档:https://www.elastic.co/guide/en/elasticsearch/reference/2.3/query-dsl-term-query.html

官方示例:

  1. PUT my_index
  2. {
  3. "mappings": {
  4. "my_type": {
  5. "properties": {
  6. "full_text": {
  7. // 没有特殊说明,查询时会分词
  8. "type": "string"
  9. },
  10. "exact_value": {
  11. "type": "string",
  12. // 指明不使用分词
  13. "index": "not_analyzed"
  14. }
  15. }
  16. }
  17. }
  18. }

添加一条数据

  1. PUT my_index/my_type/1
  2. {
  3. "full_text": "Quick Foxes!",
  4. "exact_value": "Quick Foxes!"
  5. }

由于full_text字段分词,因此在倒排索引中被默认标准分析器分为quick , foxes

exact_value字段不分词,在倒排索引中该字段的值仍为QuickFoxes!

执行查询

使用term查询exact_value,搜索内容为Quick Foxes!

  1. // 由于exact_value不分词,Quick Foxes!与exact_value的值QuickFoxes!匹配,因此可以匹配
  2. GET my_index/my_type/_search
  3. {
  4. "query": {
  5. "term": {
  6. "exact_value": "Quick Foxes!"
  7. }
  8. }
  9. }

使用term查询full_text,搜索内容为Quick Foxes!

  1. //由于full_text字段默认使用标准分析器分词,在倒排索引中被分为quick和foxes,因此使用 Quick Foxes!匹配不到内容
  2. GET my_index/my_type/_search
  3. {
  4. "query": {
  5. "term": {
  6. "full_text": "Quick Foxes!"
  7. }
  8. }
  9. }

使用term查询full_text,搜索内容为foxes

  1. // 由于full_text字段默认使用标准分析器分词,在倒排索引中被分为quick和foxes,
  2. // 因此使用 foxes可以匹配到
  3. GET my_index/my_type/_search
  4. {
  5. "query": {
  6. "term": {
  7. "full_text": "foxes"
  8. }
  9. }
  10. }

使用match查询full_text,查询内容为Quick Foxes!

  1. // 使用match搜索,先分析搜索字符串Quick Foxes!,对它分词,
  2. // 然后搜索full_text中含有quick或者foxes或者两者都包含的文档,
  3. //由于full_text字在倒排索引中被分为quick和foxes,因此可以匹配到
  4. GET my_index/my_type/_search
  5. {
  6. "query": {
  7. "match": {
  8. "full_text": "Quick Foxes!"
  9. }
  10. }
  11. }

发表评论

表情:
评论列表 (有 0 条评论,233人围观)

还没有评论,来说两句吧...

相关阅读