我目前有一个对象数组,其中包括:
{
"key": "party",
"str_val": "THE TWITTER INC"
}
和
{
"key": "party",
"str_val": "twitter inc"
}
我映射的相关部分是:
"key": {
"type": "text",
"fields": {
"keyword": {
"type": "keyword",
"ignore_above": 256
}
}
},
"str_val": {
"type": "text",
"fields": {
"keyword": {
"type": "keyword",
"ignore_above": 256
}
}
}
当我尝试执行通配符匹配时,如下所示:
"wildcard": {
"metadata.str_val": "*twitter*"
}
两个文档都被返回。但是,如果我修改查询以包含空格:
"wildcard": {
"metadata.str_val": "*twitter inc*"
}
不返回任何文档。如何使用空格进行通配符搜索?
答案 0 :(得分:2)
选项1:
在当前映射的情况下,即不使用分析仪的情况下,query_string应该为您工作。
PUT my_index2/doc/1
{
"key": "party",
"str_val": "THE TWITTER INC"
}
PUT my_index2/doc/2
{
"key": "party",
"str_val": "twitter inc"
}
POST my_index2/_search
{
"query": {
"query_string": {
"default_field": "str_val",
"query": "*twitter inc*"
}
}
}
选项2:
但是,如果要使用wildcard,则需要如下添加自定义分析器:
PUT my_index/
{
"settings": {
"analysis": {
"analyzer": {
"k_lowercase": {
"type": "custom",
"tokenizer": "keyword",
"filter": [
"lowercase"
]
}
}
}
},
"mappings": {
"doc": {
"properties": {
"key": {
"type": "text",
"fields": {
"keyword": {
"type": "keyword",
"ignore_above": 256
}
}
},
"str_val": {
"type": "text",
"fields": {
"keyword": {
"type": "keyword",
"ignore_above": 256
}
},
"analyzer":"k_lowercase"
}
}
}
}
}
现在放置分析器后添加记录:
PUT my_index/doc/1
{
"key": "party",
"str_val": "THE TWITTER INC"
}
PUT my_index/doc/2
{
"key": "party",
"str_val": "twitter inc"
}
POST my_index/_search
{
"query": {
"wildcard": {
"str_val": {
"value": "*twitter inc*"
}
}
}
}