搜索包含在值中的ElasticSearch字段
我正在尝试在ElasticSearch中运行类似的字段查询:
select * from products where 'milk' like '%'+name+'%'
意思是我正在尝试查找所有文档,其中产品名称在这种情况下是’milk’的子字符串。
我该怎么做?
回答:
我会使用一个使用ngrams的自定义分析器。首先创建一个像这样的索引:
curl -XPUT 'localhost:9200/tests' -d '{
"settings" : {
"analysis" : {
"analyzer" : {
"my_analyzer" : {
"tokenizer" : "ngrams"
}
},
"tokenizer" : {
"ngrams" : {
"type" : "nGram",
"min_gram" : "2",
"max_gram" : "10"
}
}
}
},
"mappings": {
"test": {
"properties": {
"product_name": {
"type": "string",
"analyzer": "standard",
"search_analyzer": "my_analyzer"
}
}
}
}
}'
然后,您可以索引一些数据:
curl -XPOST 'localhost:9200/tests/test/_bulk' -d '{"index":{}}
{"product_name": "bc"}
{"index":{}}
{"product_name": "cd"}
{"index":{}}
{"product_name": "def"}
'
最后,您可以像这样搜索:
curl -XPOST 'localhost:9200/tests/_search' -d '{ "query": {
"match": {
"product_name": "abcde"
}
}
}'
然后您将获得前两个文档bc
,cd
以上是 搜索包含在值中的ElasticSearch字段 的全部内容, 来源链接: utcz.com/qa/416394.html