私はNode.JSクライアントを使用してOS X上でElasticSearch 2.3.5を実行しています。 _suggest
エンドポイントは0の結果を返します。これはランダムに発生します。たとえば、4つのドキュメントのみがインデックスされるテストスイートなどで発生します。ElasticSearchのフレーズ提案者はランダムに0の結果を返します
提案者が0の結果を返す理由はありますか?これは私のテストが約50%失敗する原因となっています。
テストスイートは、以下のステップを経る:
title: {type: 'string'}
title
を持つ4つの文書の新しい、空白のインデックス
- の供給を作成しますフィールドには
_bulk
APIを使用します。- 私は
refresh=true
に合格して、ドキュメントのインデックスが作成されるようにします。
- 私は
- 簡単なテストでは、ドキュメントを照会します。彼らはすべてそこにいる。
- 明白なスペルミスの提案をリクエストしてください。 パスの50/50のチャンスや
に失敗し、私は誰もが明らかに何かを提案することができない場合は、これを証明するために自己完結型のサンプルアプリケーションを作成します。
一つの観察:小文字スペルミス(例えばalpha
ためalhpa
が100%の成功を持っている。victor
ためviTOR
のような創造的なスペルミスを導入する際の障害にのみ発生するエラーが来てされていますので、恐らく私は、しかし、この動作を想像することができます。。そして
追加)...行く:
didYouMean(input) {
return this.conn.suggest({
index: this.indexName,
type: 'customdoc',
body: {
titles: {
text: input,
phrase: {
field: 'title',
direct_generator: [{
// Only needs to be one character
// long to suggest a correction
field: 'title',
suggest_mode: 'always',
min_word_length: 1,
}],
highlight: {
pre_tag: '<strong><em>',
post_tag: '</em></strong>',
},
},
},
},
});
}
クラスタには5つのシャードがあります。私はElasticsearch-jsラッパーを使って調整することができません。 –
インデックスの作成中にのみ変更できます。シャード番号を1に設定して新しい索引を作成し、この新しい索引に全データを再索引付けする必要があります。このようなインデックスを作成する方法のドキュメントは次のとおりです。https://www.elastic.co/guide/en/elasticsearch/reference/current/indices-create-index.html –
解決済みとしてマークする。これはJSライブラリを通じて達成するのは難しいことでしたが、私は方法を見つけました。これにより一貫した結果が得られることを確認することができます。欠点は、いくつかの便利なフレーズの提案はもう出てこないということです。それらはおそらく、断片の間でソース文書がランダムに複製され、単語の頻度が増えたために生成されました。 –