如果您有可能更改映射类型和索引设置,那么正确的方法是创建一个自定义分析器,该分析器带有一个edge-n-gram 标记过滤器,它将索引该attribute
字段的所有前缀。
curl -XPUT http://localhost:9200/your_index -d '{
"settings": {
"analysis": {
"filter": {
"edge_filter": {
"type": "edgeNGram",
"min_gram": 1,
"max_gram": 15
}
},
"analyzer": {
"attr_analyzer": {
"type": "custom",
"tokenizer": "standard",
"filter": ["lowercase", "edge_filter"]
}
}
}
},
"mappings": {
"your_type": {
"properties": {
"attribute": {
"type": "string",
"analyzer": "attr_analyzer",
"search_analyzer": "standard"
}
}
}
}
}'
然后,当您索引文档时,attribute
字段值(例如)postfixing
将被索引为以下标记:p
, po
, pos
, post
, postf
, postfi
, postfix
, postfixi
, postfixin
, postfixing
。
最后,您可以使用这样的简单查询轻松查询attribute
字段的postfix
值match
。无需在查询字符串查询中使用性能不佳的通配符。
{
"query": {
"match" : {
"attribute" : "postfix"
}
}
}