我是Elastic search的新手。请帮助我找到要使用Java API编写的过滤器/查询以匹配确切的记录。
Below is the mongodb record .I need to get both the record matching the word 'Jerry' using elastic search.
{
"searchcontent" : [
{
"key" : "Jerry",
"sweight" : "1"
},{
"key" : "Kate",
"sweight" : "1"
},
],
"contentId" : "CON_4",
"keyword" : "TEST",
"_id" : ObjectId("55ded619e4b0406bbd901a47")
},
{
"searchcontent" : [
{
"key" : "TOM",
"sweight" : "2"
},{
"key" : "Kruse",
"sweight" : "2"
}
],
"contentId" : "CON_3",
"keyword" : "Jerry",
"_id" : ObjectId("55ded619e4b0406ccd901a47")
}
答案 0 :(得分:3)
如果您想搜索所有字段。 然后你可以做一个匹配_all查询,
POST <index name>/<type name>/_search.
{
"query": {
"match" : {
"_all" : "Jerry"
}
}
}
这会在所有字段中搜索“Jerry”。
答案 1 :(得分:2)
您需要在多个字段中搜索Multi-Match查询。以下查询将搜索单词&#34; jerry&#34;在两个字段&#34; searchcontent.key&#34;和&#34;关键字&#34;这就是你想要的。
POST <index name>/<type name>/_search
{
"query": {
"multi_match": {
"query": "jerry",
"fields": [
"searchcontent.key",
"keyword"
]
}
}
}
答案 2 :(得分:0)
没有单一的解决方案,这取决于您如何在弹性搜索中映射数据以及您要编制索引的内容
GET / intu / _settings
您可以使用:查询字符串。
如果您不需要组合过滤器,则可以删除bool并且应该。
来自文档:&#34; bool查询采用更多匹配更好的方法,因此每个匹配的must或should子句的得分将被加在一起,为每个文档提供最终的_score &#34;
例如:
GET /yourstaff/_search
{
"query": {
"filtered": {
"query": {
"bool": {
"should":
{
"query_string": {
"query": "jerry"
}
}
}
}
}
}
}
查看文档:
使用Sense确定您想要的结果
答案 3 :(得分:0)
使用过滤器是一个更好的选择,因为它可以缓存结果。
{
"query":
{
"bool":
{
"should":
[
{
"term":
{
"searchcontent.key":"jerry"
}
},
{
"term":
{
"keyword":"jerry"
}
}
]
}
}
}
https://www.elastic.co/blog/found-optimizing-elasticsearch-searches
建议阅读以便更好地搜索。