2017-09-05 1 views
0

ユーザー名のリストに基づいてユーザーを検索したい。ユーザ名のリストには部分ユーザ名が含まれており、Webアプリケーションに由来します。複数の値のNEST部分一致:用語やその他の方法でのワイルドカード?

var userNames = new List<string> (...); // not sure how many! 

LINQ:

var userEntity = allUsers.Where(p=> userNames.Any(x=> p.UserName.Contains(x))) 

NEST:???

must.Terms(t => t.Field(f => f.UserName).Terms<string>(usernames)) 

が、これは完全に一致していないパーシャルを返します。

上記のLINQクエリをどのようにNEST(ElasticSearch)に変換しますか?

答えて

1

非効率的な方法はprefixwildcardまたはregexpクエリ、あなたが探している一意の各ユーザ名の1集で、bool query with should clauses (if relevancy scores are needed) or a filter (if relevancy scores are not needed) clauseshouldクエリboolとの条項を設定することです。あなたが探しているデータの量と検索しているユーザー名の数によっては、このクエリのパフォーマンスは、実際にはになる可能性があります。

さらに効率的な方法は、ユーザー名をanalyzer that tokenizes usernamesでインデックスすることです。これは、検索すると予想されるトークンに基づいています。あなたがRuを検索することによって、ユーザ名Russに一致させるために探しているなら、あなたはedgengram tokenizertoken filterを含んアナライザを構築したいと思い、それからmatchクエリを使用、またはany query that undergoes analysis at query time.

関連する問題