Elastic Search可以将输入字符串拆分为分类的单词吗?即如果输入是
4star wi-fi 99$
并且我们正在搜索具有ES的酒店,是否有可能将此字符串分析/标记为
4star - hotel level, wi-fi - hotel amenities, 99$ - price
?是的,这是一个菜鸟问题:)
最佳答案
是的,没有。
默认情况下, query_string
searches将与automatically created _all
field一起使用。 _all
字段的内容来自将所有字段按字面意义和天真的组合成单个分析字符串的方式。
因此,如果您具有“4星”评级,“wi-fi”便利设施和“99 $”价格,则所有这些值都将在_all
字段内,并且您应该获得相应的点击率。例如:
{
"level" : "4star",
"amenity" : ["pool", "wi-fi"],
"price" : 99.99
}
问题在于,如果没有客户端的努力,您将不知道在搜索
_all
时匹配了哪些字段。它不会告诉您每个值的来源明细,而只是报告确定整体相关性的分数。如果您有某种方式了解每个术语(或多个术语)要搜索的字段,那么您可以自己轻松地做到这一点(不需要引号,但是最好避免空格错误)。这可能是您可以提供给上面链接的
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星,而是选择一些复选框或其他基于表单的选择,所以这应该很现实。从技术上讲,您可以创建一个自定义分析器来根据每个词的位置识别每个词,但这并不是一个好主意。
关于search - Elasticsearch 输入分析,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31090993/