c# - Equal query in Elasticsearch by Nest client -



c# - Equal query in Elasticsearch by Nest client -

public class user { public string email { get; set; } } client.index(new user { email ="test@test.te" });

query in linq c# illustration :

rep.where(user=>user.email=="test@test.te");

thats work correct.

i utilize same query in nest:

client.search<post>(q => q .query(qu => qu .term(te=>te.onfield("email").value("test@test.te"))));

document result count zero!! :

client.search<post>(q => q .query(qu => qu .term(te=>te.onfield("email").value("test"))));

document result count 1 !!why! how can create equal-quey in elasticsearch

it's because analyzers. document parsed terms while indexing, means elasticsearch stores array of strings ["test", "test", "te"] in row document. depending on anayzer configured (i guess it's standard one), may different terms decomposition. on other side, term request not analyzed; that's why first request returns nil - there's no such string "test@test.te" in index strings ["test", "test", "te"], there's "test" string, results sec one. in case should utilize query_string query, beware of fact such queries analyzed too. means, if index 2 documents, {"email":"test@test.te"} , {"email":"test@gmail.com"}, without flags query {"query":{"query_string":{"default_field":"email","query":"test@test.te"}}} homecoming both documents because both of them contain "test" string in index. avoid this, utilize {"default_field":"email","query":"test@test.te", "default_operator":"and"}}} - default default operator "or".

speaking of nest, utilize query like

client.search<post>(q => q .query(qu => qu .querystring(qs=>qs .onfield(x=>x.email).query("test@test.te").operator(operator.and) ) ) );

c# .net elasticsearch nest

Comments

Popular posts from this blog

formatting - SAS SQL Datepart function returning odd values -

c++ - Apple Mach-O Linker Error(Duplicate Symbols For Architecture armv7) -

php - Yii 2: Unable to find a class into the extension 'yii2-admin' -