2017-08-17 9 views
2

マルチロケーションクエリの場合、FirebaseデータをElasticSearchに再インデックスします。ElasticSearch:小文字の索引付けを防止する

idたとえば、ref.child('Users').push()によって自動生成された場合:-KrjGdtUqG8LkTvTZKXOは、小文字の文字列(krjgdtuqg8lktvtzkxo)でインデックスされます。
ElassticSearchのIDでユーザーを並べ替えると、注文はFirebaseと異なります。

idをFirebaseで注文し続けるには、どうすればいいですか?

+0

elasticsearch文書のIDまたはelasticsearch文書のフィールドの値として、firebaseからIDをインデックスしますか? – mel

+0

フィールドとしてインデックスを作成したいと考えています。 –

答えて

1

あなたの問題は、フィールドにアナライザーを定義せずにelasticsearchを使用している場合、elasticsearchはデフォルトで標準アナライザーを使用することです。標準アナライザはコンテンツを小文字にします。

問題を解決するには、カスタムアナライザを定義するか、インデックス時にコンテンツを小文字にしないアナライザを使用する必要があります。

私は、標準的なものよりも、別のアナライザを使用する方法を紹介します:

{ 
    "mappings":{ 
     "yourIndex":{ 
     "properties":{ 
      "theFieldWithYourID":{ 
       "analyzer":"whitespace" 
      } 
     } 
     } 
    } 
} 

ここにあなたのマッピングでは、あなたがしたいフィールドのための別のアナライザを定義します。ホワイトスペースアナライザは、コンテンツを小文字ません。White space analyser documentation

EDIT: あなたがやりたいために、よりきれいな方法は、キーワードを使用して、それがインデックス化されるべきではないとされていることを、あなたのマッピングで指定することです:

PUT yourIndex/_mapping/yourDocType 
{ 
    "properties":{ 
     "YourFireBaseID":{ 
     "type":"keyword", 
     "index":"not_analyzed" 
     } 
    } 
} 
+1

うわー!それは魅力のように機能します! –

+0

elasticsearchの力:)あなたがもっと分かりやすい分析をしたいのであれば、私はそのチュートリアルを作成しました:https://github.com/melvynator/elasticsearch_presentation – mel

+0

私はちょっとあなたの問題をもう一度私はよりクリーンな方法で私の答えを更新しました。 – mel

関連する問題