我应该使用哪些方法来使我的查询返回输入短语中文本中至少包含2个关键字的匹配。
例如,如果输入" 你好朋友"我希望返回结果包含" hello "和" 朋友"在文本的某个地方。如果输入" 你好朋友"我希望结果中的2个关键字在文本中。或者至少有最佳组合的结果。 如果我使用下面的代码,我得到的结果是"你好"或者"朋友"但不是两个。
"{\"match_all\": {},\"aggs\":{\"avg1\":{\"avg\":{\"field\":\"age\"} } }}"
^ ^
| |
this is valid this is NOT valid
我可以通过像这样的代码得到我想要的结果,但它不灵活,因为短语可以是任意数量的单词。
var searchResults = client.Search<Thread>(s => s
.Type("threads")
.From(0)
.Size(100)
.Query(q => q
.Match(qs => qs
.OnField(p => p.Posttext)
.Query("hello friend")
)
)
.Highlight(h => h
.OnFields(
f => f.OnField("posttext").PreTags("<b>").PostTags("</b>").FragmentSize(150)
)
)
);
我想我错过了一些东西。请帮忙。
提前致谢。
答案 0 :(得分:0)
你需要使用短语查询..
在匹配中,您需要将类型指定为短语..
如果您浏览上述文章,我猜您可以找到问题的方向..
PS:我知道javascript的弹性搜索......
答案 1 :(得分:0)
我发现将.Operator(Operator.And)添加到Match查询可以解决我的问题。但我需要对短语搜索进行更多调查。