2015-06-02 80 views
2

在筆記本電腦上通常有一個「類型名稱」,例如。 聯想T430 聯想T430P 聯想T430SElasticsearch部分產品類型名稱

阿蘇

用戶希望搜索T430

時,但在elasticsearch標準分析儀標記化的空間/非alfanumeric ASO發現T430的所有變體。

因此,搜索T430將只返回T430變體而不是其他變體。

解決此問題的最佳方法是什麼?我曾考慮過這些解決方案

  • 檢測到用戶搜索產品類型並將搜索轉換爲通配符搜索,例如, T430 * - 這是難以形成規模

  • 作出這樣的理解不同類型producttypes的分析,可以從T430S

回答

0

您可以使用prefix query,它比通配符查詢執行得更好。 爲此,您需要讓你的領域沒有分析如下

"type_name": {"type": "string", "index": "not_analyzed"} 

另一種方法可以是使用edge ngram tokenizer這可能會增加索引的大小,但會提供更好的性能。

您可以定義自定義分析如下

{ 
    "settings" : { 
     "analysis" : { 
      "analyzer" : { 
       "my_analyzer" : { 
        "tokenizer" : "customedgeNgram" 
       } 
      }, 
      "tokenizer" : { 
       "customedgeNgram" : { 
        "type" : "edgeNGram", 
        "min_gram" : "3", 
        "max_gram" : "10" 
       } 
      } 
     } 
    } 
} 

您需要更改min_grammax_gram值按您的需求。並且在你的領域使用的

"type_name": {"type": "string", "analyzer": "my_analyzer"} 

現在你可以在現場用簡單的詞語查詢type_name

1

構建T430令牌elasticsearch將分析default.So,你應該設置你的elasticsearch的映射如下: 「字段」:{ 「index」:「not_analyzed」, 「type」:「string」 }, 或者您可以在創建新索引之前設置模板。 我希望這會對你有所幫助。