2017-04-23 18 views
0

ELK 5.1.1スタックにnewbyがあります。私は理解するためにいくつかの質問があります。 標準的なアナライザー/フィルターで基本的にこのスタックをセットアップしました。 私のデータソースは、Logstashを使用してインデックスを作成するMySQLバックエンドです。 私はアクセントを含む質問に対処したいと思いますし、うまくいけばasciifoldingトークンフィルタがこれを達成するのを助けることができます。ELKアナライザを理解する

まず、カスタムアナライザを作成してテンプレートとして保存する方法を学びました。 logstashという名前logstashのデフォルトテンプレートと私のカスタムテンプレートの設定は次のとおりです:私はこのURL http://localhost:9200/_template?prettyを照会するとき は、今私は2つのテンプレート持って、私はYaoundeを検索する70本のヒットを返しますYaoundéキーワードの検索

"custom_template" : { 
    "order" : 1, 
    "template" : "doo*", 
    "settings" : { 
     "index" : { 
      "analysis" : { 
       "analyzer" : { 
        "myCustomAnalyzer" : { 
         "filter" : [ 
          "standard", 
          "lowercase", 
          "asciifolding" 
         ], 
         "tokenizer" : "standard" 
        } 
       } 
     }, 
     "refresh_interval" : "5s" 
    } 
    }, 
    "mappings" : { }, 
    "aliases" : { } 
} 

を私何もヒットしないでください。以下 は、誰かが私が間違ってここにやっているものを推測することができますしてください第二ケース

{ 
"query": { 
    "query_string": { 
     "query": "yaounde", 
     "fields": [ 
      "title" 
     ] 
    } 
}, 
"from": 0, 
"size": 10 
} 

のための私のクエリですか? インデックス処理中にLogstashによってデータが分析されることも知っていますが、この2番目のクエリでは、分析中にアナライザmyCustomAnalyzerを適用する必要がありますか?ここで

{ 
    "query": { 
    "query_string": { 
     "query": "yaounde", 
     "fields": [ 
      "title" 
     ], 
     "analyzer": "myCustomAnalyzer" 
    } 
}, 
"from": 0, 
"size": 10 
} 

は出力のサンプルは私のlogstashの設定ファイルの一部である

output { 
stdout { codec => json_lines } 
if [type] == "announces" { 
    elasticsearch { 
     hosts => "localhost:9200" 
     document_id => "%{job_id}" 
     index => "dooone" 
    document_type => "%{type}" 
    } 
} else { 
    elasticsearch { 
     hosts => "localhost:9200" 
    document_id => "%{uid}" 
    index => "dootwo" 
    document_type => "%{type}" 
    } 
} 
} 

+0

フィールドのタイトルにマッピングを追加しましたか?コードサンプルからはっきりとは分かりません。 –

+0

現在、私のフィールドのマッピングは、インデックス作成中にLogstashによって自動的に設定されます。これはあなたの質問@JettroCoenradieに答えますか? – BoCyrill

答えて

1

開始するには良い場所はelasticsearchのインデックステンプレートのドキュメントである: https://www.elastic.co/guide/en/elasticsearch/reference/current/indices-templates.html

タイトルフィールドのために働くことができ、あなたのシナリオの例

"custom_template" : { 
    "order" : 1, 
    "template" : "doo*", 
    "settings" : { 
     "index" : { 
      "analysis" : { 
       "analyzer" : { 
        "myCustomAnalyzer" : { 
         "filter" : [ 
          "standard", 
          "lowercase", 
          "asciifolding" 
         ], 
         "tokenizer" : "standard" 
        } 
       } 
     }, 
     "refresh_interval" : "5s" 
    } 
    }, 
    "mappings" : { 
     "your_type": { 
     "properties": { 
      "title": { 
      "type": "text", 
      "analyzer": "myCustomAnalyzer" 
      } 
     } 
     } 
    }, 
    "aliases" : { } 
} 

代替が変更になります動的マッピング。ここでは、文字列の良い例を見つけることができます。 https://www.elastic.co/guide/en/elasticsearch/reference/current/dynamic-templates.html#match-mapping-type

+0

ありがとうございます。出来た! あなたのソリューションを使用して私のタイトルフィールドのマッピングを定義しました。 – BoCyrill

0

はあなたの文書のマッピングを表示することができますありがとうございましたか!

(GET/my_index/my_doc/_mapping)

あなたのクエリに引数として提供アナライザは、検索時には、物価スライド制ではない時に適用されます。したがって、このアナライザをマッピングに設定していない場合でも、文字列は "デフォルト"のアナライザでインデックスされているため、結果と一致しません。

検索時に提供するアナライザーはクエリ文字列に適用されますが、インデックス化されたデータは「yaounde」ではなく「Yaoundé」として索引付けされます。

+0

私はこのURL http:// localhost:9200/dooone/announces/_mapping?prettyをクエリすると、この画像[![この画像] [1]] [1] [1]:https: //i.stack.imgur.com/02Ojn.png – BoCyrill

+0

私は 'http:// localhost:8270/dooone/_settings?それは正しい設定を示しています.logstashによるインデックス作成の前にテンプレートとして設定しています。 – BoCyrill

+0

テンプレートを提供できますか? –

関連する問題