2017-08-14 5 views
0

私は、コンテキストは、アプリケーションの上部にあるオートコンプリート検索バーで、次の(簡体字)のデータ特定のトークナイザからトークンを与える方法

[ 
    { id: 1, customerNumber: "0008", name: "Bob" }, 
    { id: 2, customerNumber: "0854", name: "Sue" }, 
    { id: 3, customerNumber: "0041", name: "Larry" } 
] 

を持っています。

私はカスタム正規表現トークナイザを使用して、先行ゼロをトリミングして、ユーザが入力する必要がないようにしています。だから

ID 1 => "8" 
ID 2 => "854", "85", "8" 
ID 3 => "41", "4" 

私達のユーザーが考える私がまた私にトークンを与える適用トークナイザエッジ-nグラムを持ってい

ID 1 => "8" 
ID 2 => "854" 
ID 3 => "41" 

トークンを取得するクエリ「8のための「0008」より良い一致"" 0854 "より。しかし、彼らが「8」を検索すると、「0008」よりも高いランキング「08 **」のような結果が得られます。

「8」を検索するときに「0008」ランクを「0854」より高くするにはどうすればよいですか?

  • 場合によっては、ユーザーはクエリに先行ゼロを含めます。
  • 私は、id 1と2の両方が単一の "8"にトークン化しているので、そこから等しいことが問題だと思います。私はその問題をどのように修正するのか分かりません。

問合せ:

POST _search 
{ 
    "size": 24, 
    "from": 0, 
    "query": { 
     "multi_match": { 
      "query": "8", 
      "fields": [ 
       "customerNumber", 
       "name" 
      ], 
      "type": "best_fields" 
     } 
    } 
} 

答えて

0

私は「文字フィルタ」に「トークンフィルタ」から私の「先行ゼロトリマー」を変更することによって、私の望ましい結果を達成することになりました。

また、私は「エッジNグラムトークナイザ」の代わりであることを利用した「エッジNグラムトークンフィルター」に変更。

これらの2つの変更によって、私の望む結果が得られました。

関連する問題