限制elasticsearch查询的字段为search



我想知道是否可以从Elasticsearch中排除某些字段。为了详细说明,我想从搜索范围中忽略它。当我们指定该字段时,它不应该搜索该字段,但应该可以搜索除该字段以外的所有字段。

在下面的数据中,我想实现2件事:-

  • 我想在其他所有字段中搜索产品ABC"Service_Sold"属性。

  • 我想限制某些属性的特定字段为not可搜索就像我想限制Elasticsearch不搜索这个
    字段'Service_Sold。类型的

我遇到了排除和白名单方法,这是不可行的,因为我们在索引中有很多字段,这会增加查询的复杂性。

感谢您的建议和帮助。

7.10版本elastic- search在KIBANA上运行查询。如果需要,我们也可以升级我们的版本。

这是示例文档。

{
"_index" : "_dev",
"_type" : "_doc",
"_id" : "data-2",
"_score" : 1.0,
"_source" : {
"type" : "datas",
"id_number" : 736762732784934,
"date" : "2011-01-26",
"Service_Sold" : [
{
"Type" : "Type XYZ",
"Product_Name" : "Product ABC"
}
],
"Product_Sold" : [
{
"Type" : "Type XYZ",
"Product_Name" : "Product ABC"
}
]
...
50 other attributes
}
}

最简单的方法是使用"copy_to">.只需更新索引映射并创建一个名为search_all"的字段,并使用"text"映射。然后使用"copy_to"在您想要搜索的所有字段上,并在copy_to字段上触发查询。映射例子:

PUT my-index-000001
{
"mappings": {
"properties": {
"Service_Sold": {
"type": "text"
},
"Product_Sold": {
"type": "text",
"copy_to": "search_all" 
},
"Some_other_Field": {
"type": "text",
"copy_to": "search_all" 
},
"search_all": {
"type": "text"
}
}
}
}

在上面的映射中,"Product_sold","其他field"将被复制到search_all。但"Service_Sold"不会被复制。当你搜索的时候,只要做一个"匹配"就可以了。或";match_phrase"但只能在搜索栏上搜索场。

这样就可以排除,而不会使查询复杂化。

对于仅限制为"Service Sold.type"的第二部分,您可以对该字段执行一个简单的匹配查询。你不需要做任何特别的事情。

Copy_To_Documentation

编辑:如果你想动态地改变你正在查询的字段,你可以使用"search_templates",在那里你可以传递字段名/名称作为一个变量。

搜索模板。

最新更新