2016-01-06 115 views
0

我有一個用例,它有點類似於dynamic_template的ES示例,其中我想要分析某些字符串,而不是某些字符串。ES自定義動態映射字段名稱更改

我的文檔字段沒有這樣的約定,並且根據外部模式做出決定。所以,目前我的流程是:

  • 我(目前使用進口logstash同一個數據庫,)
  • 我的文檔中調整名稱搶輸入文件從DB
  • 我搶approrpiate模式因此(使用logstash的紅寶石突變):
    • 如果沒有分析我不改名字
    • 如果分析我將其更改爲ORIGINALNAME_analyzed

這將處理分析感謝/ not_analyzed問題dynamic_template我確定,但現在用戶不知道哪些字段進行分析,以便有沒有簡單的方法爲他寫的查詢,因爲他不知道這個領域的名字是什麼。

我想使用字段名稱別名,但顯然ES不支持它們。是否有任何其他機制我錯過了我可以在這裏使用像索引後的字段重命名或其他?

例如this ancient thread提到field.sub.name可以查詢剛剛name但我猜測,當他們禁止在名稱.前一段時間,因爲我無法得到它的工作這種情況已經改變?

回答

1

讓用戶只用原始名稱創建查詢。我相信你有一些代碼可以將這個用戶查詢轉換成Elasticsearch查詢。轉換爲Elasticsearch查詢時,不要使用用戶單獨提供的字段名稱,而應使用字段名稱ORIGINALNAME以及ORIGINALNAME_analyzed。如果您正在使用match查詢,請將其轉換爲multi_match。如果您正在使用term查詢,請將其轉換爲boolshould查詢。我想你會得到我要去的地方。

Elasticsearch不會介意,如果一個字段不存在。如果已經有一個以原始名稱附加了_analyzed的字段,則可能會出現問題。但有一些技巧可以修復。

+0

是啊這就是我現在正在做的 - 其實我也在ES中存儲名稱映射,所以我可以很容易地得到自己的實際名稱,只是希望有內置的東西:-) –

+0

你只使用'multi_match'查詢? – bittusarkar

+0

實際上我使用了很多不同類型的查詢和聚合。開始認爲分析所有字符串字段並用它來完成可能更簡單:-) –