更改字段属性

时间:2018-02-06 13:55:05

标签: elasticsearch packetbeat

我正在使用packetbeat监视3306上的mysql端口并且它运行良好。 我可以轻松搜索发现选项卡上的任何单词。例如,

method:SET

这可以按预期工作。但如果我把它改成

query:SET

然后它不会在查询字段中返回带有“SET”字样的文档。查询字段的索引是否不同? 如何使“查询”字段可搜索?

更新

这是因为参数“ignore_above”用于所有字符串字段吗?我使用这个API检查了映射...

GET /packetbeat-2018.02.01/_mapping/mysql/

如何删除此限制并使所有未来的节拍成为索引查询字段?

更新2:

如果我在搜索中提到基于“查询”字段的整个字符串,它会按预期工作......

query:"SELECT name, type, comment FROM mysql.proc WHERE name like 'residentDetails_get' and db <=> 'portal' ORDER BY name, type"

这将返回过去15分钟内的所有688条记录。当我搜索以下内容时,我希望得到更多...

query:"SELECT"

但我没有得到一个记录。我想这是因为文档索引的方式。我更愿意回到相当于SQL:查询,如'%SELECT%'

2 个答案:

答案 0 :(得分:1)

这是正确的行为,给定查询和字段的映射。这不是1024限制。您可以省略query:部分,以便Elasticsearch将使用_all字段(将在不久的将来删除),但这取决于您使用的堆栈的版本。

或者,更好更正确的方法是在packetbeat模板中以不同方式配置查询字段(以便下一个索引将使用新映射)如下所示:

    "query": {
      "type": "text",
      "fields": {
        "raw": {
          "type": "keyword",
          "ignore_above": 1024
        }
      }
    }

主要思想是ES不会在查询字段中拆分值(因为它是keyword),您需要一种方法来执行此操作。您可以使用通配符,但ES不喜欢它们(尤其是前导通配符),并且在运行此类查询时可能会出现性能问题。从ES的角度来看,“正确”的方法是我已经提到的方法:分析字段,保留其原始版本(用于排序和聚合)以及用于搜索的简单版本。

答案 1 :(得分:0)

packetbeat的查询字段声明为&#34;关键字&#34;。因此,您只能搜索整个查询。例如,

query: "select * from mytable"

但是如果我们需要搜索查询:&#34; mytable&#34; 怎么办? 您需要通过修改fields.yml文件来使查询字段可搜索。将 type:text 参数添加到/ etc / packetbeat中找到的fields.yml文件的MySQL部分的查询字段

该文件的相关部分将如下所示......

- name: query
  type: text
  description: >
    The query in a human readable format. For HTTP, it will typically be
    something like `GET /users/_search?name=test`. For MySQL, it is
    something like `SELECT id from users where name=test`.