Elasticsearch-模糊查询_elasticsearch 模糊查询
模糊查询
-
前缀搜索:prefix
概念:以xx开头的搜索,不计算相关度评分。
注意:
-
前缀搜索匹配的是term,而不是field。
-
前缀搜索的性能很差
-
前缀搜索没有缓存
-
前缀搜索尽可能把前缀长度设置的更长
语法:
GET <index>/_search{ \"query\": { \"prefix\": { \"\": { \"value\": \"\" } }}}index_prefixes: 默认 \"min_chars\" : 2, \"max_chars\" : 5
-
PUT my_index{ \"mappings\": { \"properties\": { \"text\": { \"analyzer\": \"ik_max_word\", \"type\": \"text\", \"index_prefixes\":{ \"min_chars\":2, \"max_chars\":4 }, \"fields\": { \"keyword\": { \"type\": \"keyword\", \"ignore_above\": 256 } } } } }}
PUT my_index的含义是向Elasticsearch发送一个PUT请求来创建一个名为“my_index”的索引。
在Elasticsearch中,索引是用于存储和检索数据的容器。每个索引都有一个或多个映射(mapping),这些映射定义了索引中字段的类型、分析器、字段属性等。在提供的JSON中,“mappings\"字段的作用是指定索引的映射定义。它定义了索引中包含的字段及其属性。
在\"properties\"字段下,定义了一个名为\"text\"的字段。该字段的配置如下:
“analyzer”: “ik_max_word”:指定使用\"ik_max_word\"分析器,这是一个用于中文分词的分析器。
“type”: “text”:字段类型设置为\"text”,表示这是一个文本字段,可以用于全文搜索。
“index_prefixes”:定义了前缀搜索的参数,其中\"min_chars\"和\"max_chars\"分别表示最小和最大前缀长度。
“fields”:定义了多重字段(multi-fields),即一个字段可以有多个不同的表示。在这里,定义了一个名为\"keyword\"的子字段,其类型为\"keyword\",表示这是一个不分析的字段,通常用于精确匹配和排序。
\"ik_max_word\"是IK分词器的一个变种,用于中文分词。它试图将文本尽可能细粒度地分割成单词,以提供更好的全文搜索效果。
\"index_prefixes\"和\"fields\"的用途是提供对文本字段的额外索引方式。例如,\"index_prefixes\"使得可以使用前缀搜索,而\"fields\"中的\"keyword\"子字段使得可以进行精确匹配和排序,而不是基于分析器的全文搜索。
综合上述配置,这个映射定义了一个名为\"text\"的文本字段,该字段使用\"ik_max_word\"分析器进行中文分词,并提供了前缀搜索和精确匹配的不同索引方式。
GET my_index/_mappingPOST /my_index/_bulk?filter_path=items.*.error{ \"index\":{ \"_id\":\"1\"}}{ \"text\":\"城管打电话喊商贩去摆摊摊\"}{ \"index\":{ \"_id\":\"2\"}}{ \"text\":\"笑果文化回应商贩老农去摆摊\"}{ \"index\":{ \"_id\":\"3\"}}{ \"text\":\"老农耗时17年种出椅子树\"}{ \"index\":{ \"_id\":\"4\"}}{ \"text\":\"夫妻结婚30多年AA制,被城管抓\"}{ \"index\":{ \"_id\":\"5\"}}{ \"text\":\"黑人见义勇为阻止抢劫反被铐住\"}GET my_index/_searchGET my_index/_mappingGET _analyze{ \"analyzer\": \"ik_max_word\", \"text\": [\"城管打电话喊商贩去摆摊摊\"]}GET my_index/_search{ \"query\": { \"prefix\": { \"text\": { \"value\": \"摊摊\" } } }}
-
通配符:wildcard
概念:通配符运算符是匹配一个或多个字符的占位符。例如,*通配符运算符匹配零个或多个字符。您可以将通配符运算符与其他字符结合使用以创建通配符模式。
注意:
-
通配符匹配的也是term,而不是field
语法:
GET <index>/_search{ \"query\": { \"wildcard\": { \"\": { \"value\": \"\" } }}}
-
# 通配符DELETE my_indexPOST /my_index/_bulk{ \"index\": { \"_id\": \"1\"}