“analyzer”: “standard”,
“text”: [“lonely wolf”]
}
可以看到,lonely wolf
被分成了 lonely
和 wolf
两个单词,所以我们将 lonely wolf
作为一个进行查询自然是无法查询到结果的。
这里有个地方需要注意,如果我们存入的是大写单词,如 Lonely Wolf
,分词器也是一样的结果,也就是会将大写字母统一转化为小写进行存储,所以进行全文查询的时候也是无法查询出结果。
exists 查询
用来判定是否存在某一个字段,返回包含字段的任何索引值的文档。
GET index_002/_search
{
“query”: {
“exists”: {
“field”: “address”
}
}
}
这里返回的结果就是第三条和第四条数据,像 null
值和空数组 []
不会被返回。
如果想要返回 null
值或者空数组 []
的数据,那么可以利用 bool
查询的 must_not
语句:
GET index_002/_search
{
“query”: {
“bool”: {
“must_not”: [
{
“exists”: {“field”: “address”}
}
]
}
}
}
fuzzy 查询
用于近似查询,比如我们有时候在用百度搜索的时候,输错了字会被纠正:
一般情况下有一个单词错误的情况下,fuzzy
查询可以找到另一个近似的词来代替,主要有以下场景:
-
修改一个单词,如:
box
—>fox
。 -
移除一个单词,如:
black
–>lack
。 -
插入一个单词,如:
sic
–>sick
。 -
转换两个单词顺序,如:
act
–>cat
。
为了可以查询到这种近似的单词,fuzzy
查询需要创建一个所有近似词的集合,这样搜索的时候就可以采用精确查询找到近似的词来代替查询。
比如下面这个查询就可以查询出前面四条数据