1

エラスティック検索を使用して自動提案機能を実装したいと考えています。nGram フィルターを使用して、複数のフィールドの部分的な単語を一致させ、期待どおりに機能させることができます。検索の出力は、必要に応じて複数のフィールドを含む完全なドキュメントを返します。今私の問題は、一致するフィールドに基づいてユーザーに自動提案を与える方法です。たとえば、5 つのフィールドがあります。

{userId:'rakesh',firstName:'Rakesh','lastName':'Goyal','mobileNo':'123-123-1234','alternativeMobileNo':'123-123-1235'}
{userId:'goyal',firstName:'Goyal','lastName':'Rakshit','mobileNo':'123-123-1236','alternativeMobileNo':'123-123-1237'}

上記の例で、ユーザーが 123 を入力した場合、123-123-1234、123-123-1235、123-123-1236、123-123-1237 (4 つの自動提案) を返します。

同様に、ユーザーが Rak と入力した場合、Rakesh、Rakshit (2 つの自動提案) を返したいと思います。

最初の例の mobileNo と alternativeMobileNo フィールドに一致が存在することを確認し、それに応じて結果を返すにはどうすればよいですか?

2 番目の例の firstName フィールドと lastName フィールドに一致が存在することを確認し、それに応じて結果を返すにはどうすればよいですか?

4

1 に答える 1

1

一致するフィールドに基づいてユーザーに自動提案を行うにはどうすればよいですか?

ユーザーが123と入力したら、それを Java 変数に格納し、その変数を挿入して以下のようなクエリを作成し、ElasticSearch にリクエストを送信します。

{
    "query" : { 
          "query_string" : {
              "query" : "*123*"
           } 
     }
}

上記のクエリは、フィールドmobileNoとの両方でそれをチェックすることができますalternativeMobileNo

同様に、ユーザーがRakと入力すると、クエリは前のものと同様になります。

{
    "query" : { 
          "query_string" : {
              "query" : "*Rak*"
           } 
     }
}

そして、ハイライター APIを使用して最後の方法の質問に答えたいと思います。これにより、1 つ以上のフィールドで検索結果を強調表示できます。

es のハイライト例のスクリーンショット:

ES ハイライト API

于 2013-11-03T21:33:22.017 に答える