0

私はpipeとこのインデックスを持っています。私がテストしようとすると、パイプで区切られた単語ではなく、すべてのcharが返されます。elasticsearchカスタムアナライザのテスト - パイプで区切られたキーワード

私の入力行keywordsが次のようになるユースケース用に構築しようとしています。crockpot refried beans|corningware replacement|crockpot lids|recipe refried beansとELは、展開後に一致を返します。

{ 
    "keywords": { 
    "aliases": { 

    }, 
    "mappings": { 
     "cloud": { 
     "properties": { 
      "keywords": { 
      "type": "text", 
      "analyzer": "pipe" 
      } 
     } 
     } 
    }, 
    "settings": { 
     "index": { 
     "number_of_shards": "5", 
     "provided_name": "keywords", 
     "creation_date": "1513890909384", 
     "analysis": { 
      "analyzer": { 
      "pipe": { 
       "type": "custom", 
       "tokenizer": "pipe" 
      } 
      }, 
      "tokenizer": { 
      "pipe": { 
       "pattern": "|", 
       "type": "pattern" 
      } 
      } 
     }, 
     "number_of_replicas": "1", 
     "uuid": "DOLV_FBbSC2CBU4p7oT3yw", 
     "version": { 
      "created": "6000099" 
     } 
     } 
    } 
    } 
} 

私はこれを次のようにテストしようとしています。guide

curl -XPOST 'http://localhost:9200/keywords/_analyze' -d '{ 
"analyzer": "pipe", 
"text": "pipe|pipe2" 
}' 

私はchar-by-charの結果を返します。

{ 
    "tokens": [ 
    { 
     "token": "p", 
     "start_offset": 0, 
     "end_offset": 1, 
     "type": "word", 
     "position": 0 
    }, 
    { 
     "token": "i", 
     "start_offset": 1, 
     "end_offset": 2, 
     "type": "word", 
     "position": 1 
    }, 
    { 
     "token": "p", 
     "start_offset": 2, 
     "end_offset": 3, 
     "type": "word", 
     "position": 2 
    }, 
    { 
     "token": "e", 
     "start_offset": 3, 
     "end_offset": 4, 
     "type": "word", 
     "position": 3 
    }, 

答えて

1

良い仕事、あなたはほぼそこにいます。

 "tokenizer": { 
     "pipe": { 
      "pattern": "\\|", <--- change this 
      "type": "pattern" 
     } 
     } 

そしてあなたのアナライザは、この仕事と生成されます:

{ 
    "tokens": [ 
    { 
     "token": "pipe", 
     "start_offset": 0, 
     "end_offset": 4, 
     "type": "word", 
     "position": 0 
    }, 
    { 
     "token": "pipe2", 
     "start_offset": 5, 
     "end_offset": 10, 
     "type": "word", 
     "position": 1 
    } 
    ] 
} 
+0

あなたはどのように知ることが起こるのかをパイプ|文字は、正規表現の予約文字なので、あなたはこのようにそれをエスケープする必要がありますインデックスを再作成せずにトークナイザを書き直すには? – Pentium10

+0

インデックス設定でアナライザーを更新し、インデックスでupdate_by_queryを呼び出すと、更新するためにデータ – Val

+0

がリフレッシュされ、インデックスを閉じて/ _settingsにputを適用してから、インデックスを再度開き、waitシャード再初期化 – Pentium10

関連する問題