2017-06-21 7 views
0

私は弾性検索アナライザーに関する質問があります。 私はこのようなカスタム・アナライザの作成:Custom ElasticSearch Analyzerを使用する

Analyzers(o => o.Custom("custom", 
         m => m.CharFilters("icu_normalizer").Filters("lowercase", "asciifolding").Tokenizer("icu_tokenizer") 

をそして次のトークン(良い)になりアナライザみました:

/_analyze?analyzer=custom&text=SödertorG 

{ 
    "tokens": [ 
     { 
      "token": "sodertorg", 
      "start_offset": 0, 
      "end_offset": 9, 
      "type": "<ALPHANUM>", 
      "position": 0 
     } 
    ] 
} 

をしかし、私はこのように、このトークンを検索しようとすると:

_search?q=sodertorg&analyzer=custom 

結果は(悪い)表示されません。

{ 
    "took": 1, 
    "timed_out": false, 
    "_shards": { 
     "total": 5, 
     "successful": 5, 
     "failed": 0 
    }, 
    "hits": { 
     "total": 0, 
     "max_score": null, 
     "hits": [] 
    } 
} 

私に何かが不足していますか?おかげさまで

+0

データを保存した正確なフィールド、つまり '_search?q = field:sodertorg&analyzer = custom'を使用するとどうなりますか? – Val

+0

は役に立ちません。標準のアナライザは 'södertorg'(または_search?q = name1:södertorg)を検索するとすぐに結果を見つけることができますが、私のカスタムアナライザは他の検索(たとえば 'jarn'の一部として動作します。電子メールフィールド) – Senj

+0

カスタムアナライザはどこに保存されていますか? –

答えて

0

query_stringクエリを実行するときは、_allフィールドをターゲティングします。クエリ文字列に指定されているanalyzerは、クエリの分析方法にのみ適用されます。 _allフィールドは、コンテンツがインデックスされているときに、まだstandardアナライザを使用しています。

修正するには、カスタムanalyzerがマッピングの_allフィールドに適用されていることを確認する必要があります。

var createIndexResponse = client.CreateIndex("my-index", c => c 
    .Settings(s => s 
     .Analysis(a => a 
      .Analyzers(o => o 
       .Custom("custom", m => m 
        .CharFilters("icu_normalizer") 
        .Filters("lowercase", "asciifolding") 
        .Tokenizer("icu_tokenizer") 
       ) 
      ) 
     ) 
    ) 
    .Mappings(m => m 
     .Map<Project>(mm => mm 
      // apply to _all field 
      .AllField(s => s 
       .Analyzer("custom") 
      ) 
      .AutoMap() 
     ) 
    ) 
); 

このようにマッピングされたアナライザを使用すると、期待される結果が得られます。クエリのアナライザをインデックス時間とクエリ時間の両方の分析に使用するため、アナライザをクエリでもう指定する必要はありません。

関連する問題