[英]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.