elasticSearch-DSL

Posted dennyzhao

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了elasticSearch-DSL相关的知识,希望对你有一定的参考价值。

DSL:

  query_string

  match

  match_phrase

       match_phrase_prefix

  multi_match

     simple_query_string

  term

  terms

  bool(must,should,must_not)

 query:

   query主要是将要查询的内容进行内部分词后匹配然后获取 or的结果。比如:query “中国人民” 则会查询 内容中有“中”“国”“人”“民”“中国”“人民”“国人”“中国人”“中国人民”

  在查询中可使用 OR  或关联 AND 并关联   ***进行模糊匹配

  "query": "kill OR a"      "query": "kill AND a"     "query": ""bird"" 

  注意查询的单词一律用小写,不能用大写,大写内容有特殊含义

query_string 最基本的查询:

全文检索:

POST http://192.168.201.105:9200/_search
{"query": 
      {"query_string": {
         "query": "kill"
      }}
}

 

fields指定属性内检索

POST http://192.168.201.105:9200/_search
{"query": 
      {"query_string": {
         "fields": [
            "title"
         ], 
         "query": "kill"
      }}
}

match 匹配查询:

"match" : {[filed] :[text]}  

POST http://192.168.201.105:9200/_search
{"query": 
      {"match": {
         "title": "kill"
      }}
}

 

 match 的text中还可以这样写:

POST http://192.168.201.105:9200/_search
{"query": 
      {"match": {
         "title": {
             "query": "bird"
         }
      }}
}

 

 match_phrase 短句查询:

POST http://192.168.201.105:9200/_search
{"query": 
      {"match_phrase": {
         "title": "to kill a"
      }}
}

 

 match_phrase_prefix 短句最后不完全字符查询,也就是我们有时知道前缀的模糊查询:

POST http://192.168.201.105:9200/_search
{"query": 
      {"match_phrase_prefix": {
         "title": "to ki"
      }}
}

 

 multi_match 多复合查询:

多个可能的值以空格隔开以下就为 title中为 kill 或者 bill的内容。

POST http://192.168.201.105:9200/_search
{"query": 
      {"multi_match": {
         "query": "kill Bill",
         "fields": ["title"]
      }}
}
如果我们想要对检索的内容进行分级显示:
就要添加type: "best_fields" 以完全匹配最高,
    type: "most_fields" 以最多匹配最高
    type: "cross_fields" 分词在不同的属性里



simple_query_string 简单query查询:
POST http://192.168.201.105:9200/_search
{"query": 
      {"simple_query_string": {
         "query": "kill Bill",
         "fields": ["title"]
      }}
}

term 不分词查询:

  即如果现在有中国人则 term会完全在分词上去查找“中国人”这个分词,而不会去理会中国,或国人。

post _search
{
    "query": {
        "term": {
           "content": {
              "value": "中国人"
           }
        }
    }
}

terms 也是不分词查询,但是支持多个结果以或的形式存在。

post _search
{
    "query": {
        "terms": {
           "content": [
              "中国人",
              "中国"
           ]
        }
    }
}

bool查询(must,should,must_not,filter)

bool可实现联合查询,must必须存在,should可能存在,must_not 一定不存在

 

  

 








以上是关于elasticSearch-DSL的主要内容,如果未能解决你的问题,请参考以下文章

如何记录或打印被调用的 python elasticsearch-dsl 查询

elasticSearch-DSL

如何在elasticsearch-dsl(5.4.0)中使用搜索API中的索引

我可以将 elasticsearch-dsl 的 IpRange 子类化以供 django-elasticsearch-dsl 使用吗?

微信小程序代码片段

VSCode自定义代码片段——CSS选择器