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(5.4.0)中使用搜索API中的索引
我可以将 elasticsearch-dsl 的 IpRange 子类化以供 django-elasticsearch-dsl 使用吗?