2016-10-05 12 views
0

私は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>', 
          }, 
         }, 
         }, 
        }, 
        }); 
    } 
    
  • 答えて

    1

    :ここで私はElasticSearchのAPI用に書かれてきたラッパー関数です提案はシャードごとに計算されます。 このインデックスにはいくつの断片がありますか? 1より大きい場合は、1つのシャードでインデックス上で発生するかどうかを確認できますか?

    +0

    クラスタには5つのシャードがあります。私はElasticsearch-jsラッパーを使って調整することができません。 –

    +0

    インデックスの作成中にのみ変更できます。シャード番号を1に設定して新しい索引を作成し、この新しい索引に全データを再索引付けする必要があります。このようなインデックスを作成する方法のドキュメントは次のとおりです。https://www.elastic.co/guide/en/elasticsearch/reference/current/indices-create-index.html –

    +0

    解決済みとしてマークする。これはJSライブラリを通じて達成するのは難しいことでしたが、私は方法を見つけました。これにより一貫した結果が得られることを確認することができます。欠点は、いくつかの便利なフレーズの提案はもう出てこないということです。それらはおそらく、断片の間でソース文書がランダムに複製され、単語の頻度が増えたために生成されました。 –

    関連する問題