2017-08-17 103 views
2

我正在为多位置查询重新索引Firebase数据到ElasticSearchElasticSearch:阻止小写索引

但是,当我保存由ref.child('Users').push()例如生成id汽车:-KrjGdtUqG8LkTvTZKXO被索引为小写字符串(krjgdtuqg8lktvtzkxo)。
因此,当我通过ElassticSearch中的ID对用户进行排序时,订单与Firebase不同。

我该如何正确编制id来保留Firebase订单?

+0

您是否想要将firebase中的id作为elasticsearch文档的id或作为elasticsearch文档中字段的值编入索引? – mel

+0

我想索引它作为一个字段。 –

回答

1

你的问题是,当你在没有为你的领域定义分析器的情况下使用elasticsearch时,elasticsearch将默认使用标准分析器。标准分析仪将小写您的内容。

要解决您的问题,您应该定义一个自定义分析器或使用不会在索引时间小写内容的分析器。

我将向你展示如何使用其它的分析比标准之一:

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

这里在映射定义其它的分析你想要的领域。白色空间分析仪没有小写内容:White space analyser documentation

编辑: 一个更清洁的方式做你想要的是在映射您正在使用关键字来指定,它不应该被索引:

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

哇!它像一个魅力! –

+0

elasticsearch :)如果你想更好地理解分析器的功能,我做了那个教程:https://github.com/melvynator/elasticsearch_presentation – mel

+0

我只是虽然你的问题再次更新我的答案,一个更干净的方式。 – mel