请求

  1. GET http://127.0.0.1:9200/user/user5/_search

一、match

  1. {
  2. "query": {
  3. "match": {
  4. "name" : "中华人民共和国"
  5. }
  6. }
  7. }

上面的查询会先对内容进行分词,分词以后所有包含这分词中的一个或多个的文档就会被搜索出来。并且根据lucene的评分机制(TF/IDF)来进行评分。

二、match_phrase

  1. {
  2. "query": {
  3. "match_phrase": {
  4. "name" : "中华人民共和国"
  5. }
  6. }
  7. }

精确匹配所有同时包含所有分词的文档
完全匹配可能比较严,我们会希望有个可调节因子,少匹配一个也满足,那就需要使用到slop

  1. {
  2. "query": {
  3. "match_phrase": {
  4. "name": {
  5. "query": "中华人民共和国",
  6. "slop": 1
  7. }
  8. }
  9. }
  10. }

三、multi_match

  1. {
  2. "query": {
  3. "multi_match": {
  4. "query" : "中华人民共和国",
  5. "fields" : ["title", "content"]
  6. }
  7. }
  8. }

如果我们希望两个字段进行匹配,其中一个字段匹配分词,文档就满足,使用multi_match

type

best_fields

完全匹配的文档占的评分比较高,则需要使用best_fields,

  1. {
  2. "query": {
  3. "multi_match": {
  4. "query": "中华人民共和国",
  5. "type": "best_fields",
  6. "fields": [
  7. "tag",
  8. "content"
  9. ],
  10. "tie_breaker": 0.3
  11. }
  12. }

most_fields

希望越多字段匹配的文档评分越高,就要使用most_fields

  1. {
  2. "query": {
  3. "multi_match": {
  4. "query": "中华人民共和国",
  5. "type": "most_fields",
  6. "fields": [
  7. "tag",
  8. "content"
  9. ]
  10. }
  11. }

cross_fields

希望这个词条的分词词汇是分配到不同字段中的,那么就使用cross_fields

  1. {
  2. "query": {
  3. "multi_match": {
  4. "query": "中华人民共和国",
  5. "type": "cross_fields",
  6. "fields": [
  7. "tag",
  8. "content"
  9. ]
  10. }
  11. }

四、term

term是代表完全匹配,即不进行分词器分析,文档中必须包含整个搜索的词汇

  1. {
  2. "query": {
  3. "term": {
  4. "name" : "中华人民共和国"
  5. }
  6. }
  7. }

五、bool

联合查询,多条件匹配

  • must: 文档必须完全匹配条件
  • should: should下面会带一个以上的条件,至少满足一个条件,这个文档就符合should
  • must_not: 文档必须不匹配条件
  1. {
  2. "query": {
  3. "bool": {
  4. "must": {
  5. "term": {
  6. "name" : "中华人民共和国"
  7. }
  8. },
  9. "must_not": {
  10. "term": {
  11. "title" : "中华人民共和国"
  12. }
  13. }
  14. }
  15. }
  16. }

六、match_all

全部搜索

  1. {
  2. "query": {
  3. "match_all": {
  4. "name" : "中华人民共和国"
  5. }
  6. }
  7. }

七、Query Filter

可以对搜索结果进行过滤

  1. {
  2. "query": {
  3. "bool": {
  4. "must": [
  5. {
  6. "match": {
  7. "name" : "中华人民共和国"
  8. }
  9. }
  10. ],
  11. "filter": {
  12. "range": {
  13. "price": {
  14. "gt": 4000
  15. }
  16. }
  17. }
  18. }
  19. }
  20. }