2015-06-27 86 views
0

可以弹性搜索将输入字符串拆分成分类的单词吗?即,如果输入的是弹性搜索输入分析

4星级的Wi-Fi 99 $

,我们正与ES搜索酒店,是能够分析/标记化这个字符串作为 4star - hotel level, wi-fi - hotel amenities, 99$ - price

是的,这是一个noob问题:)

回答

2

是的,没有。

默认情况下,query_string searches将针对automatically created _all field_all字段的内容来自字面上和天真地将所有字段组合成单个分析字符串。因此,如果您有“4星级”评级,“Wi-Fi”设施和“99美元”价格,那么所有这些值都将位于_all字段内,您应该获得相关匹配反对。例如:

{ 
    "level" : "4star", 
    "amenity" : ["pool", "wi-fi"], 
    "price" : 99.99 
} 

的问题是,你不会 - 无需客户端的努力 - 对知道搜索_all匹配时,哪一个领域(S)。它不会告诉你每个价值来自哪里的细分,而只是报告一个决定总体相关性的分数。

如果有知道哪个领域的每个术语(或术语)是为了对搜索的一些方法,那么你可以很容易地自己做(引号并不是必须的,但他们是很好的有以避免空间错误)。这是,你可能会提供给query_string查询上面链接中输入:

level:"4star" amenity:"wi-fi" price:(* TO 100) 

您可以通过使用拼写查询进一步复杂化的是:

{ 
    "query" : { 
    "bool" : { 
     "must" : [ 
     { "match" : { "level" : "4star" } }, 
     { "match" : { "amentiy" : "wi-fi" } }, 
     { 
      "range" : { 
      "price" : { 
       "lt" : 100 
      } 
      } 
     } 
     ] 
    } 
    } 
} 

当然最后两个请求仍然需要先进关于每个搜索术语引用的知识。您当然可以使用“99 $”中的$作为价格提示,但不适用于其他提示。有机会,你不会让他们输入4星我希望,而是有一些复选框或其他基于表单的选择,所以这应该是相当现实的。

从技术上讲,您可以创建一个自定义分析器,根据它们的位置识别每个术语,但这不是一个好的或有用的想法。

+0

沿着我最后一个注释的方向,你应该也可以制作星号数字。 – pickypg