我想根据用户名列表查找用户。用户名列表可能包含部分用户名,并且将来自网络应用程序。
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)?
答案 0 :(得分:1)
效率低下的方法是设置bool
query with should
clauses (if relevancy scores are needed) or a filter
(if relevancy scores are not needed) clause bool
个should
个Russ
个句子,其中包含prefix
,wildcard
或{{3查询,一个用于您要查找的每个唯一用户名。根据您正在查看的数据量以及您要搜索的用户名数量,此查询的性能可能真的不好。
更有效的方法是根据您希望搜索的令牌使用regexp
索引用户名,例如如果您希望通过搜索Ru
来匹配用户名match
,那么您需要构建包含analyzer that tokenizes usernames或edgengram tokenizer的分析器,然后使用{ {1}}查询,或token filter