在elasticsearch中,match_phrase
查询将匹配完整短语。match_phrase_prefix
查询将匹配短语作为前缀。
例如:
"my_field": "confidence ab"
将匹配:"confidence above;和"对……有信心">
是否有查询"match phrase any"就像下面的例子:
"my_field": "dence ab"
应该取match: "confidence above"和对
的信心 感谢有两种方法可以做到这一点
- 通过在mapping =>中应用关键字analyzer type在ES中按原样存储字段值做通配符搜索(或)
- 使用ngram tokenizer存储字段=>使用或不使用标准或关键字搜索分析器 ,根据您的需求搜索数据
通配符搜索通常是性能低下的。
请根据我的上述建议让我知道你的进展,以便我可以在需要时进一步帮助你
您需要定义字段到关键字的映射,如下所示:
PUT test
{
"mappings": {
"properties": {
"name":{
"type": "keyword"
}
}
}
}
然后使用下面的通配符搜索这个字段:
GET test/_search
{
"query": {
"wildcard": {
"name": {
"value": "*dence ab*"
}
}
}
}
如果您对此有任何问题,请告诉我。
在您的情况下,最简单的解决方案是使用查询字符串查询或简单查询字符串查询。后者对查询语法错误不那么严格。
首先,确保您的字段映射为类型text
。下面的示例在test-index
下为名为my_field
的字段创建映射。
{
"test-index" : {
"mappings" : {
"properties" : {
"my_field" : {
"type" : "text"
}
}
}
}
}
然后,使用带有通配符的查询字符串query进行搜索。
{
"query": {
"query_string": {
"fields": ["my_field"],
"query": "*dence ab*"
}
}
}