索引前缀
通过 index_prefixes
映射参数,引擎会为文本字段中术语的起始部分生成额外的索引条目。启用后,它会根据可配置的最小和最大字符长度构建前缀索引。这可以通过让这些查询快速匹配预索引的术语前缀,显著提高前缀查询(例如自动完成或即时搜索)的性能。
默认情况下,不执行前缀索引,以保持最小索引大小和快速索引操作。但是,如果您的应用程序受益于快速前缀匹配,启用此参数可以显著提高查询效率。
索引前缀配置
您可以将以下配置参数传递给 index_prefixes
映射参数
min_chars
: 需要索引的前缀的最小长度。最小值为0
。默认值为2
。max_chars
: 需要索引的前缀的最大长度。最大值为20
。默认值为5
。
在字段上启用索引前缀
以下请求创建一个名为 products
的索引,其中 name
字段配置为构建一个长度介于 2
到 10
个字符之间的前缀索引
PUT /products
{
"mappings": {
"properties": {
"name": {
"type": "text",
"index_prefixes": {
"min_chars": 2,
"max_chars": 10
}
}
}
}
}
使用以下请求索引文档
PUT /products/_doc/1
{
"name": "Ultra HD Television"
}
以下搜索请求显示了一个前缀查询,用于搜索 name
字段以 ul
开头的文档
POST /products/_search
{
"query": {
"prefix": {
"name": "ul"
}
}
}
响应包含匹配的文档
{
...
"hits": {
"total": {
"value": 1,
"relation": "eq"
},
"max_score": 1,
"hits": [
{
"_index": "products",
"_id": "1",
"_score": 1,
"_source": {
"name": "Ultra HD Television"
}
}
]
}
}
使用默认参数的索引前缀
以下请求使用带有默认参数的 index_prefixes
创建一个名为 products_default
的索引
PUT /products_default
{
"mappings": {
"properties": {
"name": {
"type": "text",
"index_prefixes": {}
}
}
}
}