我想知道我是否可以从Elasticsearch的搜索中排除某些字段。为了简化,我想从我的搜索范围中忽略它。当我们指定时,它不应该搜索该字段,但应该可以搜索除该字段以外的所有字段。
在下面的数据我想实现2件事:-
- 我想在除“Service_Sold”属性之外的所有其它字段中搜索产品ABC。
- 我希望将某些属性的特定字段限制为不可搜索,就像我希望将Elasticsearch限制为不在此
字段“服务_销售类型”
我遇到了排除和白名单方法,这是不可行的,因为我们有很多字段的索引,并会增加查询的复杂性。
如果您有任何建议和帮助,我们将不胜感激。
注意7.10版本ElasticSearch在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
}
}
1条答案
按热度按时间uxh89sit1#
最简单的方法是使用**“copy_to”**。只需更新您的索引Map并创建一个名为“search_all”的字段,使用“text”Map。然后对所有您希望具有可搜索性的字段使用“copy_to”,并对“copy_to”字段启动查询。示例Map:
在上面的Map中,**“Product_sold”、“Some other field”**将被复制到search_all。但不会复制“Service_Sold”。搜索时,只需在“search_all”字段上执行“匹配”或“匹配短语”即可。
这样,您就可以排除而不会使查询复杂化。
至于第二部分,只限制为“ServiceSold.type”,你可以在该字段上做一个简单的匹配查询,你不需要做任何特殊的事情。
Copy_To_Documentation
EDIT:如果你想动态地改变你正在查询的字段,你可以使用“search_templates”,在这里你可以把字段名作为变量传递。
Search Templates.