《Elastic Stack 实战手册》——三、产品能力——3.4.入门篇——3.4.2.Elasticsearch基础应用——3.4.2.17.Text analysis, settings 及 mappings——3.4.2.17.3.全文搜索/精确搜索(6) https://developer.aliyun.com/article/1229937
6、我们再使用 WITHIN 查询范围为 10 到 22 的文档,应该只返回文档 11。
POST my-index-000001/_search { "query": { "range": { "agerange": { "gte": 10, "lte": 22, "relation": "WITHIN" } } } } # 返回内容 { ...... "hits" : { "total" : { "value" : 1, "relation" : "eq" }, "max_score" : 1.0, "hits" : [ { "_index" : "my-index-000001", "_type" : "_doc", "_id" : "11", "_score" : 1.0, "_source" : { "agerange" : { "lte" : 21, "gte" : 10 } } } ] } }
7、最后使用 WITHIN 查询范围为 10 到 30 的文档,应该两个文档均返回。
POST my-index-000001/_search { "query": { "range": { "agerange": { "gte": 10, "lte": 30, "relation": "WITHIN" } } } } # 返回内容 { ...... "hits" : { "total" : { "value" : 2, "relation" : "eq" }, "max_score" : 1.0, "hits" : [ { "_index" : "my-index-000001", "_type" : "_doc", "_id" : "12", "_score" : 1.0, "_source" : { "agerange" : { "lte" : 30, "gte" : 20 } } }, { "_index" : "my-index-000001", "_type" : "_doc", "_id" : "11", "_score" : 1.0, "_source" : { "agerange" : { "lte" : 21, "gte" : 10 } } } ] } }
注意:range 查询 text 或者 keyword 需要打开 search.allow_expensive_queries 设置。
3.6 fuzzy
Fuzzy 查询即模糊查询,用于返回包含与搜索词相似的词的文档。
先来理解一下编辑距离(edit distance)的概念。编辑距离是将一个词项转换为另一个词项所需的一个字符的更改数。比如:
l 更改一个字符( box → fox )
l 删除一个字符( black → lack )
l 插入字符( sic → sick )
l 调换两个相邻字符( act → cat )
为了找到相似的词项,模糊查询在指定的编辑距离内创建一组所有可能的变体或扩展的搜索词项。然后查询返回每个展开的精确匹配。
使用方法:
GET term-query/_search { "query": { "fuzzy": { "user.id": { "value": "ki" } } } }
相关参数:
l fuzziness:允许匹配的最大编辑距离。可以是 0/1/2/AUTO。
l max_expansions:创建的最大变体或者扩展词项数。默认为50。有效的控制这个参数可以降低性能损耗。
l prefix_length:在创建展开时保持不变的起始字符数。默认值为0。 注意,正常使用中大部分的字母拼写错误发生在词的结尾,而不是词的开始。 例如通过将 prefix_length 设置为 3 ,能够显著降低匹配的词项数量。
l transpositions:指示编辑是否包括两个相邻字符的换位(ab→ba)。默认值为true。
详细使用:
GET term-query/_search { "query": { "fuzzy": { "user.id": { "value": "ki", "fuzziness": "AUTO", "max_expansions": 50, "prefix_length": 0, "transpositions": true, "rewrite": "constant_score" } } } }
注意:range 查询 text 或者 keyword 需要打开 search.allow_expensive_queries 设置。
《Elastic Stack 实战手册》——三、产品能力——3.4.入门篇——3.4.2.Elasticsearch基础应用——3.4.2.17.Text analysis, settings 及 mappings——3.4.2.17.3.全文搜索/精确搜索(8) https://developer.aliyun.com/article/1229934