sunliwen / poco

Poco v1.6
0 stars 1 forks source link

好药师:商品规格字段的调整 #37

Closed jacobfan closed 10 years ago

jacobfan commented 10 years ago

来自 @kalakala 的需求: 目前搜索时会查询到商品规格字段。对于商品规格是试图完全匹配,而这不符合需要。 商品规格字段搜索时应该忽略"-", 空格等符号。可以只匹配数字和大小写英文符号。 举例:假如规格是 "A-1 23-B",那么搜索"A123B", "A 123 B", "A-----1 2-3-B"等等都应该能搜到。

aoeuidht commented 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'}

aoeuidht commented 10 years ago

鉴于 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"
      ] 
    }
  }
}