Closed jacobfan closed 10 years ago
看了一下目前检索的逻辑,目前对于检索 sku 的处理是
如果
q
中没有空格,则在检索条件中,增加对sku字段的搜索,条件为{sku: q}
为了满足对sku检索的需求,在 index item 的时候,增加一个字段sku_clean
, 值为 sku 剔除 连字符、空格之后的值; 同时,在add_sku_query
中,更将逻辑更改为
剔除
q
中连字符、空格之后(q'),如果剩下的值为[0-9a-Z], 增加对sku字段的搜索,条件为{sku_clean: q'}
鉴于 wildchar
的检索方式比较慢,使用ngram
analyzer 来处理 item_spec
字段,具体 es 配置如下:
{
"analyzer": {
"ngram_analyzer": {
"type": "custom",
"tokenizer": "ngram_tokenizer",
"filter": [
"standard"
]
}
},
"tokenizer": {
"ngram_tokenizer": {
"type": "nGram",
"min_gram": "2",
"max_gram": "30",
"token_chars": [
"letter",
"digit"
]
}
}
}
来自 @kalakala 的需求: 目前搜索时会查询到商品规格字段。对于商品规格是试图完全匹配,而这不符合需要。 商品规格字段搜索时应该忽略"-", 空格等符号。可以只匹配数字和大小写英文符号。 举例:假如规格是 "A-1 23-B",那么搜索"A123B", "A 123 B", "A-----1 2-3-B"等等都应该能搜到。