搜索包含在值中的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"

}

}

}'

然后您将获得前两个文档bccd

以上是 搜索包含在值中的ElasticSearch字段 的全部内容, 来源链接: utcz.com/qa/416394.html

回到顶部