2012-01-26 8 views
5

私はElasticSearch設定を持っていて、CouchDBリバーを介してインデックスを付けるデータを受け取りました。私は、CouchDB文書のほとんどのフィールドが実際には検索に関係しないという問題があります。アプリケーションで内部的に使用されるフィールド(IDなど)であり、これらのフィールドのために誤検出したくないという問題があります。さらに、必要なデータを索引付けすることは、私にはリソースの無駄に思えます。ElasticSearch:マッピングで指定されたフィールドのみをインデックス化します

この問題を解決するために、インデックスを作成するフィールドを指定するマッピングを定義しました。私はpyesを使用してElasticSearchにアクセスしています。私が従うプロセスは次のとおりです。

  1. インデックスに関連付けられたCouchDBリバーを作成します。これは明らかにインデックスも作成し、そのインデックスに「couchdb」マッピングを作成します。このマッピングでは、すべてのフィールドと動的に割り当てられたタイプが表示されます。
  2. 実際にインデックスを作成したいフィールドにマップを入れてください。

によって得られた。これは、インデックス定義である:

curl -XGET http://localhost:9200/notes_index/_mapping?pretty=true 

{ 
    "notes_index" : { 
    "default_mapping" : { 
     "properties" : { 
     "note_text" : { 
      "type" : "string" 
     } 
     } 
    }, 
    "couchdb" : { 
     "properties" : { 
     "_rev" : { 
      "type" : "string" 
     }, 
     "created_at_date" : { 
      "format" : "dateOptionalTime", 
      "type" : "date" 
     }, 
     "note_text" : { 
      "type" : "string" 
     }, 
     "organization_id" : { 
      "type" : "long" 
     }, 
     "user_id" : { 
      "type" : "long" 
     }, 
     "created_at_time" : { 
      "type" : "long" 
     } 
     } 
    } 
    } 
} 

私が持っている問題は何倍である:

  • デフォルトの「CouchDBの」マッピングはすべてのフィールドをインデックス化していること。これいらない。そのマッピングの作成を避けることは可能ですか?私は混乱しています。なぜなら、そのマッピングは何とかCouchDBの川に「接続」しているようだからです。
  • 私が作成したマッピングは、任意の効果を持っていないようです。そのマッピング

でインデックス化なしの文書はありませんあなたはこの上の任意のアドバイスはありますか?インデックス1で

server="localhost" 

# Create the index 
curl -XPUT "$server:9200/index1" 

# Create the mapping 
curl -XPUT "$server:9200/index1/mapping1/_mapping" -d ' 
{ 
    "type1" : { 
     "properties" : { 
      "note_text" : {"type" : "string", "store" : "no"} 
     } 
    } 
} 
' 

# Configure the river 
curl -XPUT "$server:9200/_river/river1/_meta" -d '{ 
    "type" : "couchdb", 
    "couchdb" : { 
     "host" : "localhost", 
     "port" : 5984, 
     "user" : "admin", 
     "password" : "admin", 
     "db" : "notes" 
    }, 
    "index" : { 
     "index" : "index1", 
     "type" : "type1" 
    } 
}' 

文書はまだそのI だけ一つである、「note_text」以外の分野が含まれています。これは私が実際に入力したとおりに、やっているものです

EDIT

マッピング定義で特に言及しています。何故ですか?

答えて

0

CouchDB川のデフォルトの動作は、着信CouchDBドキュメントにあるすべてのフィールドをインデックスする「動的」マッピングを使用することです。インデックスのサイズを不必要に大きくする可能性があります(検索の問題は、クエリから一部のフィールドを除外することで解決できます)。

this articleを参照)の代わりに1「動的」で、あなたはあなたが作成したマッピングを使用するために川のプラグインを設定する必要があり、独自のマッピングを使用するには:

curl -XPUT 'elasticsearch-host:9200/_river/notes_index/_meta' -d '{ 
    "type" : "couchdb", 

    ... your CouchDB connection configuration ... 

    "index" : { 
     "index" : "notes_index", 
     "type" : "mapping1" 
    } 
}' 

タイプの名前というマッピング中にURLに指定しています。PUTは、定義に含めるものを上書きします。したがって、作成するタイプは実際にはmapping1です。あなた自身のために参照するには、次のコマンドを実行してみてください。

> curl 'localhost:9200/index1/_mapping?pretty=true' 

{ 
    "index1" : { 
    "mapping1" : { 
     "properties" : { 
     "note_text" : { 
      "type" : "string" 
     } 
     } 
    } 
    } 
} 

私はあなたがタイプの右の名前を取得する場合、それは細かい作業を開始することを考えています。

+0

ご意見ありがとうございますが、何かが不明です。そのPUTリクエストで私のマッピング(私は 'default_mapping'と呼んでいました)をどこで利用しますか? – dangonfast

+0

インデックスごとに1つのマッピングがありますが、各マッピングで宣言された複数の 'タイプ'を持つことができます。あなたが使用しようとしているマッピング・タイプがわからなかったのです。それらのうちの2つ、つまりcouchdbとdefault_mappingがあります。川の設定で 'type'キーの値を変更するだけです。 –

+0

元の質問を編集して、ESを設定するための実際のPOSTリクエストを表示しました。これはまだ動作していません。すべてのフィールドはまだ索引付けされています。 – dangonfast

関連する問題