模糊查询
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/_mapping
POST /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/_search
GET my_index/_mapping
GET _analyze
{
"analyzer": "ik_max_word",
"text": ["城管打电话喊商贩去摆摊摊"]
}
GET my_index/_search
{
"query": {
"prefix": {
"text": {
"value": "摊摊"
}
}
}
}
# 通配符
DELETE my_index
POST /my_index/_bulk
{
"index": {
"_id": "1"}