php-すでにインデックス付けされたドキュメントで取り込みパイプラインを使用するにはどうすればよいですか?
FOSElasticaBundleを使用して、ドキュメント(Doctrineを介してデータベースに保持されているSymfonyプロジェクトのエンティティ)をElasticSearchにインデックス付けしています。 FOSElasticaは、その後、すべてのドキュメントの自動マッピングとインデックス作成を行います。
問題は、すべてのドキュメント(既にインデックスに登録されているドキュメントと今後のドキュメント)に適用したいアクションがあることです。そのため、パイプラインと痛みのないものが良い解決策のようです。
しかし、すでにインデックスが作成されているドキュメントにパイプラインを適用する方法を理解できません。どのようにすればよいかわかりますか?
ESリクエストの後に「pipeline=my_pipeline_name」を追加できることを確認しましたが、すべてのドキュメントに影響を与えたい場合は、1つのドキュメントに対して追加できます。
答え :
解決策:
データを1つのインデックスから別のインデックスに移動するときに、パイプラインを使用できます。
あるインデックスから別のインデックスへのmovement/ingestion_process
中にデータに対して実行されるようにするには、 ReindexAPIを使用する必要があります。
注:これはインデックスレベルの操作であり、すべてのドキュメントに影響することを意味します。
以下は手順の概要です:
temporary_index
、 を作成します
source_index
からtemporary_index
へのインデックスの再作成にはReindexAPIを使用します。パイプラインも含まれます(以下に提供されるサンプルクエリ)source_index
を削除して再作成します。インデックスの作成時に、マッピングも含まれていることを確認してください。- 宛先名として
source_index
を使用し、ソース名としてtemporary_index
を使用して、同じクエリを実行します パイプライン以下は、パイプラインでReindexAPIを使用する方法です
POST _reindex {{ "ソース": { "インデックス": "source_index _name" }、 "宛先":{ "インデックス": "temporary_index"、 "パイプライン": "some_ingest_pipeline" } }
これが役立つかどうか教えてください!
答え :
解決策:
それで、しばらくして、問題に対するより効率的な解決策を見つけました。動的テンプレートとインデックステンプレート >
実際、ElasticSearchが一部のタイプのフィールド(dateやgeo_pointなど)を認識できないという問題があったため、テンプレートを使用して、特定の名前のフィールドに強制しました。
FOSElasticaでの構成の例が必要な場合(ドキュメントはこちら):
fos_elastica:
serializer:
serializer: jms_serializer
clients:
default:
host: localhost
port: 9200
index_templates: # https://www.elastic.co/guide/en/elasticsearch/reference/6.8/indices-templates.html
base_template: # this is a custom name for the index template
client: default
template: "*" # this is where you define which indices will use this template
types:
_doc: # this is where you define which types will use this (_doc stands for every type/documents)
dynamic_templates: # https://www.elastic.co/guide/en/elasticsearch/reference/6.8/dynamic-templates.html
dynamic_date_template: # this is a custom name for the dynamic field template
match_pattern: regex
match: created|updated|tpq_date|taq_date
mapping:
type: date
dynamic_location_template:
match: location
mapping:
type: geo_point
同様の質問
私たちのウェブサイトで同様の質問で答えを見つけてください。