按字母顺序索引关键字列表VS在弹性搜索中根本不排序?

时间:2017-10-01 15:02:43

标签: elasticsearch lucene elasticsearch-5

我使用elasticsearch存储standard analyzer的关键字列表,如下所示:

{
   id:1,
   body_color:'silver,blue',
   feature:'wifi,gps'  
},
{
   id:2,
   body_color:'blue,red',
   window_color:'yellow,white',
   feature:'multi core,wifi'
}

按字母顺序对这些列表进行排序,例如

{
   id:1,
   body_color:'blue,silver',
   feature:'gps,wifi'  
},
{
   id:2,
   body_color:'blue,red',
   window_color:'white,yellow',
   feature:'multi core,wifi'
}

需要更小的索引尺寸,因为标准越多,变化越小?它是否有助于规范化令牌?

1 个答案:

答案 0 :(得分:1)

首先,正如您所说,这些是关键词而不是文本。然后应该使用类型keyword而不是类型文本,不分析关键字。

您的文档应如下所示:

{
   id:1,
   body_color:'silver,blue',
   feature:['wifi','gps']  
},
{
   id:2,
   body_color:'blue,red',
   window_color:['yellow','white'],
   feature:'multi core,wifi'
}

关于排序的问题。当elasticsearch分析字符串时,他正在应用以下内容:

  1. 字符过滤器
  2. 标记生成器
  3. 令牌过滤器
  4. 字符过滤器将删除您不想像HTML标记一样索引的字符。在此之后,tokeniser将应用于剩余的字符串,它将您的字符串分成一个标记列表。最后一步,令牌过滤器,将删除列表中的某些标记,例如停止单词,然后每个标记将被添加到倒排索引,这将使它们可搜索。

    我不相信对关键字进行排序会提高索引的效率。