我在使用弹性搜索嵌套实现搜索时遇到困难。 我必须使用弹性搜索实现类似查询。 对于前从表格中选择*,其中包含'%abc xyz%' 等用户名 正如您在上面的sql查询中所看到的,我已经应用了类似查询的字符串" abc"空格和另一个字符串" xyz"。同样,我想在弹性搜索中使用此查询。任何人都可以帮我在弹性搜索嵌套中实现这样的查询吗?
以下是查询
Client.Search<Video>(s => s
.Query(q => q
.Match(m => m
.OnField("video_parent")
.Query("0")
) && q
.Match(m => m
.OnField("video_status")
.Query(objVideosFilterCriteria.VideoStatus.ToString())
) && q
.MatchPhrase(ff=>ff
.OnField("video_title")
.Query(objVideosFilterCriteria.SearchString)
) && q
.Range(r => r
.OnField(f => f.video_date)
.GreaterOrEquals(fromDate)
.LowerOrEquals(toDate)
)
)
.From(objVideosFilterCriteria.PageIndex)
.Size(objVideosFilterCriteria.PageSize)
);
以上是我正在使用的查询。在此查询中,我正在使用
q.MatchPhrase(ff=>ff
.OnField("video_title")
.Query(objVideosFilterCriteria.SearchString)
)
用于类似查询。但它似乎不起作用。 我正在使用下面的数据集,并希望从下面的列表中过滤数据。
"hits" : [
{
"_source" : {
"video_id" : 265006,
"video_title" : "nunchuk rockin roller II"
}
},
{
"_source" : {
"video_id" : 265013,
"video_title" : "?Shaggy?????Locks???7??????Alberto E. Interview {407} 967 ~ 8596?"
}
},
{
"_source" : {
"video_id" : 265014,
"video_title" : "Shakin' Stevens - Kalundborg Rocker"
}
},
{
"_source" : {
"video_id" : 265019,
"video_title" : "?Shaggy?????Locks? = 7??????Greg M. Interview {407} 967 ~ 8596?"
}
},
{
"_source" : {
"video_id" : 265023,
"video_title" : "?Shaggy?????Locks? = 7??????Jason M. Interview {407} 967 ~ 8596?"
}
}
例如,我想搜索关键字&#34; kin rol&#34;在&#34; video_title&#34;字段所以使用上面的数据,它应该获取一个记录,它存在于上面列表的第一个位置,但在我当前的查询中,我得到了。什么都没有。
答案 0 :(得分:0)
您必须使用通配符来获取想要的数据。
string searchTerm = "*kin rol*";
.Query(q => q.Wildcard(wc => wc.Field(f => f.video_title).Value(term)));
请记住,通配符查询的速度可能很慢,建议不要以*通配符开头。
如果要进行空间搜索,还需要添加分析器。请参考以下链接