我正在使用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%'
答案 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`.