您可以同时使用 ngram 和边缘 n-gram 分词器来实现您所需的用例。
添加一个包含索引映射、索引数据、搜索查询和搜索结果的工作示例
索引映射:
{
"settings": {
"analysis": {
"analyzer": {
"ngram_analyzer": {
"tokenizer": "ngram_tokenizer"
},
"edge_ngram_analyzer": {
"tokenizer": "edge_tokenizer"
}
},
"tokenizer": {
"ngram_tokenizer": {
"type": "ngram",
"min_gram": 1,
"max_gram": 10,
"token_chars": [
"letter",
"digit"
]
},
"edge_tokenizer": {
"type": "edge_ngram",
"min_gram": 1,
"max_gram": 10,
"token_chars": [
"letter",
"digit"
]
}
}
},
"index.max_ngram_diff": 10
},
"mappings": {
"properties": {
"ID": {
"type": "text",
"analyzer": "ngram_analyzer"
},
"postal_codes": {
"type": "text",
"analyzer":"edge_ngram_analyzer"
}
}
}
}
索引数据:
{
"postal_codes": "27829"
}
{
"ID": "ABCDEFGH"
}
{
"postal_codes": "29019"
}
如果ID是ABCDEFGH,搜索DEF就会显示出来。
搜索查询:
{
"query": {
"term": {
"ID": "DEF"
}
}
}
搜索结果:
"hits": [
{
"_index": "66778583",
"_type": "_doc",
"_id": "1",
"_score": 0.2876821,
"_source": {
"ID": "ABCDEFGH"
}
}
]
搜索 2 将显示两者
搜索查询:
{
"query": {
"term": {
"postal_codes": "2"
}
}
}
搜索结果:
"hits": [
{
"_index": "66778583",
"_type": "_doc",
"_id": "3",
"_score": 0.18232156,
"_source": {
"postal_codes": "27829"
}
},
{
"_index": "66778583",
"_type": "_doc",
"_id": "2",
"_score": 0.18232156,
"_source": {
"postal_codes": "29019"
}
}
]
搜索 29 将显示 29019
搜索查询:
{
"query": {
"term": {
"postal_codes": "29"
}
}
}
搜索结果:
"hits": [
{
"_index": "66778583",
"_type": "_doc",
"_id": "2",
"_score": 0.6931471,
"_source": {
"postal_codes": "29019"
}
}
]