Kibana 限制要搜索的ElasticSearch查询中的字段

yi0zb3m4  于 2022-12-09  发布在  Kibana
关注(0)|答案(1)|浏览(236)

我想知道我是否可以从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
        }
}
uxh89sit

uxh89sit1#

最简单的方法是使用**“copy_to”**。只需更新您的索引Map并创建一个名为“search_all”的字段,使用“text”Map。然后对所有您希望具有可搜索性的字段使用“copy_to”,并对“copy_to”字段启动查询。示例Map:

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"
      }
    }
  }
}

在上面的Map中,**“Product_sold”、“Some other field”**将被复制到search_all。但不会复制“Service_Sold”。搜索时,只需在“search_all”字段上执行“匹配”或“匹配短语”即可。
这样,您就可以排除而不会使查询复杂化。
至于第二部分,只限制为“ServiceSold.type”,你可以在该字段上做一个简单的匹配查询,你不需要做任何特殊的事情。
Copy_To_Documentation
EDIT:如果你想动态地改变你正在查询的字段,你可以使用“search_templates”,在这里你可以把字段名作为变量传递。
Search Templates.

相关问题