2017-04-03 12 views
0

私はDrupalでインデックスを作成し、私のクエリが動作します。 今、私は失敗したelasticsearch.ymlファイルにフィルタを小文字とasciifoldingを追加しようとする、しかし:ElasticsearchとDrupal:フィルタ小文字とasciifoldingを追加する方法

index: 
analysis: 
    analyzer: 
    default: 
    filter : [standard, lowercase, asciifolding] 

私はエラーがあります:IndexCreationExceptionを:

私はこれらの行を追加[myindex]インデックスの作成に失敗しました。 しかし、 'myindex'はすでに存在しています。私はこの既存のインデックスにフィルタを追加しようとしています。

インデックス作成が正しいようにこれらのフィルタを追加するにはどうすればよいですか?

ありがとうございました。

答えて

0

この例外が発生する理由は、一般的なcreate indexエンドポイントを呼び出してインデックスの設定を更新できないためです。アナライザーを更新するには、 '_settings'エンドポイントを呼び出す必要があります。

私はこれを行う方法のあなたのための小さな例を作りました:

PUT test 
{ 
    "settings": { 
    "analysis": { 
     "analyzer": { 
     "new_analyzer": { 
      "tokenizer": "standard" 
     } 
     } 
    } 
    } 
} 

GET test/_analyze 
{ 
    "analyzer": "new_analyzer", 
    "text": "NoLowercasse" 
} 

POST test/_close 

PUT test/_settings 
{ 
    "analysis": { 
    "analyzer": { 
     "new_analyzer": { 
     "tokenizer": "standard", 
     "filter": [ 
      "asciifolding", 
      "lowercase" 
     ] 
     } 
    } 
    } 
} 

POST test/_open 

GET test/_analyze 
{ 
    "analyzer": "new_analyzer", 
    "text": "LowerCaseAdded" 
} 

は応答:

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

あなたは第2の分析の後、小文字のフィルタが適用されていることがわかります。インデックスを閉じる必要がある理由は、アナライザーを再構築する必要があるためです。以前に追加された文書はこのアナライザーでは索引付けされていませんでしたので、新しいアナライザーは期待通りに機能しません。 これを修正するには、インデックスを再構築する必要があります(Reindex-APIなど)

編集:これはDrupal-Elasticのソリューションではないので、私はたぶん応答が少し速かったかもしれませんが、正しい方向に向けるかもしれません。正直言って私はDrupalとの組み合わせでESを実行することに慣れていません。

+0

本当にありがとうございました。確かに正しい方向ですが、現時点ではDrupalには適用できません。 –

+0

私はチェックし続けます –

+0

私は新しい質問をしました。続きの... –

関連する問題