elasticsearch之查询(Query DSL)
一、字段类查询
字段类查询主要包含以下2类:
- 全文匹配:针对text 类型的字段进行全文检索,会对查询语句先进行分词处理,如match、match_phrase等query类型
- 单词匹配:不会对查询语句进行分词处理,直接去匹配字段的倒排索引,如term、terms、range等query 类型
补:match、match_phase、term、query_string的区别
1.term结构化字段查询,匹配一个值,且输入的值不会被分词器分词。
比如查询条件是:
{
"query":{
"term":{
"foo": "hello world"
}
}
}
那么只有在字段中存储了“hello world”的数据才会被返回,如果在存储时,使用了分词,原有的文本“I say hello world”会被分词进行存储,不会存在“hello world”这整个词,那么不会返回任何值。
但是如果使用“hello”作为查询条件,则只要数据中包含“hello”的数据都会被返回,分词对这个查询影响较大。
2.match_phase习语匹配,查询确切的phase,在对查询字段定义了分词器的情况下,会使用分词器对输入进行分词,然后返回满足下述两个条件的document:
1.match_phase中的所有term都出现在待查询字段之中
2.待查询字段之中的所有term都必须和match_phase具有相同的顺序
{
"foo":"I just said hello world" }
{
"foo":"Hello world" }
{
"foo":"World Hello" }
3.使用match_phase:
{
"query": {
"match_phrase"