[英]Elastic-search not returning documents using Nest
我對ElasticSearch
很新。
我無法使用ElasticSearch
進行搜索,我嘗試了幾種方式,似乎沒有什么對我ElasticSearch
。
如果我對chrome使用sense chrome toolkit Sense擴展並查詢此
GET /employee/_search?q=FirstName="Eldho"
它工作正常。
我已經看了這個答案 ,也不適合我。
無法使用Nest進行搜索
protected ElasticClient Client;
IndexName index = "employee";
public ElasticSearchRepository(Uri elasticServerUri)
{
var connection = new ConnectionSettings(elasticServerUri).DefaultIndex("employee");
this.Client = new ElasticClient(connection);
}
//This is how i create Index
public void CreateIndex()
{
var settings = new IndexSettings();
settings.NumberOfReplicas = 1;
settings.NumberOfShards = 1;
var indexstate = new IndexState();
indexstate.Settings = settings;
Client.CreateIndex(index, g => g.Index(index)
.InitializeUsing(indexstate)
.Mappings(j => j.Map<Employee>(h => h.AutoMap(1))));
}
public List<Employee> Search(string search)
{
//All 3 searches are not wokring for me
var response = Client.Search<Employee>(s => s
.AllIndices()
.AllTypes()
.From(0)
.Size(10)
.Query(q =>q
.Term(t => t.FirstName, "Eldho")));
var result = Client.Search<Employee>(h => h
.Query(q => q
.Match(m => m.Field("FirstName").Query(search))));
var result2 = Client.Search<Employee>(h => h
.Type("employee")
.Query(k => k
.Term(g => g.FirstName, "Eldho")));
return result.Documents.ToList();
}
請讓我知道我做錯了什么。
我在代碼中的任何地方都看不到你索引任何文檔,但我猜你已經索引了它們。
第一次搜索
var response = Client.Search<Employee>(s => s
.AllIndices()
.AllTypes()
.From(0)
.Size(10)
.Query(q =>q
.Term(t => t.FirstName, "Eldho")));
因為您正在使用帶有"Eldho"
的term
查詢,所以將不匹配,但是將使用.AutoMap()
執行的字段的映射默認情況下將使用string
字段上的標准分析器 ,其中包括小寫字母令牌。 如果您使用"eldho"
更改為term
查詢,我希望找到匹配項。
你的第二次搜索
var result = Client.Search<Employee>(h => h
.Query(q => q
.Match(m => m.Field("FirstName").Query(search))));
將不匹配,因為默認情況下,NEST在索引,映射,搜索等時使用了屬性名稱。因此,POCO上名為FirstName
的屬性將映射到該文檔類型的映射中名為firstName
的字段。
你的第三次搜索
var result2 = Client.Search<Employee>(h => h
.Type("employee")
.Query(k => k
.Term(g => g.FirstName, "Eldho")));
遇到與第一次搜索相同的問題。
在NEST中執行與您在Sense中發送的查詢匹配的查詢字符串查詢
client.Search<Employee>(s => s
.Query(q => q
.QueryString(qs => qs
.Fields(f => f.Field(ff => ff.FirstName))
.Query("Eldho")
)
)
);
如果您使用問題中的連接設置使用NEST索引文檔,那么這應該有效,盡管我在您的Sense查詢中注意到您使用"FirstName"
字段獲得結果。 要在NEST中更改字段推斷以使其不具有駝峰字段/屬性名稱,我們可以使用
var settings = new ConnectionSettings(elasticServerUri)
.DefaultFieldNameInferrer(p => p);
var client = new ElasticClient(settings);
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.