我遇到ElasticSearch查询短语的问题。 我的索引文件是;
var person = new Person
{
Id = "4",
Firstname = "ali ahmet",
Lastname = "yazıcı"
};
var index = client.Index(person, x => x.Index("personindex"));
我的搜索短语是;
var result = client.Search<Person>(s => s
.From(0)
.Size(10)
.Query(q => q
.SimpleQueryString(qs => qs
.OnFields(new[]{"firstname","lastname"})
.Query("\"ali ah*\"")
)
)
);
结果文档为空。但是当我把我的短语改为
时.Query("\"ali ahmet\"")
结果即将到来。为什么从
返回空结果.Query("\"ali ah*\"")
这句话。
修改
人员类
public class Person
{
public string Id { get; set; }
public string Firstname { get; set; }
public string Lastname { get; set; }
}
索引映射
var response = client.CreateIndex("personindex", c => c
.AddMapping<Person>(m => m.MapFromAttributes())
答案 0 :(得分:0)
来自documentation的简单查询字符串:
&#34;包装了许多代币以表示搜索的短语
当您搜索.Query("\"ali ah*\"")
时,它实际上会查找短语ali ah*
,但*
不会被视为通配符。
将您的NEST查询发送至:
var result = client.Search<Person>(s => s
.Explain()
.From(0)
.Size(10)
.Query(q => q
.QueryString(qs => qs
.OnFields(new[] {"firstname", "lastname"})
.Query("ali ah*")
)
));
希望它有所帮助。
答案 1 :(得分:0)
var result = client.Search<Person>(s => s
.Explain()
.From(0)
.Size(10)
.Query(q => q
.Match(qs => qs
.OnFields(new[] {"firstname", "lastname"})
.Query("ali ah*")
.MinimumShouldMatch(100)
)
));