可以弹性搜索将输入字符串拆分成分类的单词吗?即,如果输入的是弹性搜索输入分析
4星级的Wi-Fi 99 $
,我们正与ES搜索酒店,是能够分析/标记化这个字符串作为 4star - hotel level, wi-fi - hotel amenities, 99$ - price
?
是的,这是一个noob问题:)
可以弹性搜索将输入字符串拆分成分类的单词吗?即,如果输入的是弹性搜索输入分析
4星级的Wi-Fi 99 $
,我们正与ES搜索酒店,是能够分析/标记化这个字符串作为 4star - hotel level, wi-fi - hotel amenities, 99$ - price
?
是的,这是一个noob问题:)
是的,没有。
默认情况下,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星我希望,而是有一些复选框或其他基于表单的选择,所以这应该是相当现实的。
从技术上讲,您可以创建一个自定义分析器,根据它们的位置识别每个术语,但这不是一个好的或有用的想法。
沿着我最后一个注释的方向,你应该也可以制作星号数字。 – pickypg