簡體   English   中英

更改字段屬性

[英]Changing field properties

我正在使用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%'這樣的查詢

給定查詢和字段映射,這是正確的行為。 這與1024個限制無關。 您可以省略query: part,以便Elasticsearch使用_all字段(不久后將刪除),但這取決於您使用的Stack版本。

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

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

主要思想是ES不會拆分查詢字段中的值(因為它是keyword ),因此您需要一種方法來做到這一點。 您可以使用通配符,但是ES不喜歡通配符(尤其是前導通配符),並且在運行此類查詢時可能會出現性能問題。 從ES的角度來看,“正確”的方法是我已經提到的方法:對字段進行分析,保留它的原始版本(用於排序和聚合),並保留它的簡單版本以進行搜索。

packetbeat的查詢字段被聲明為“關鍵字”。 因此,您只能搜索整個查詢。 例如

query: "select * from mytable"

但是,如果我們需要搜索查詢:“ mytable”怎么辦? 您需要通過修改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`.

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM