Elasticsearch中关键字查询的句子
问题描述:
我正在构建一个问题机器人,直到现在我正在使用mongodb。不过,我刚刚发现elasticsearch,它看起来非常强大。Elasticsearch中关键字查询的句子
我有一个'别名文档'的数据库,这意味着每个文档都有一个'别名'字段,这个字段可能是某人可能称之为的名称的数组。
例如:
Events Collection:
{
name: "Birthday Party",
aliases: ["birthday", "birthday party", "birthday"],
place: "Tom's house"
},
{
name: "Bowling Night",
aliases: ["bowling", "bowling night"],
place: "Tom's Alley"
}
凡我查询将句子是这样的:“?将生日是在什么时候” '保龄球在哪里?'
别名在数据库中是独一无二的,所以在上面的查询中,我希望它返回第一个'生日派对'文档,第二个'保龄球之夜'。
我知道这是相当复杂的东西,目前我正在使用一个非常低效的方法,其中我保存所有别名在内存中的数组,然后搜索它们,如果字符串包含它。
在elasticsearch中有一个查询可以做这样的事情吗?
答
当你调用它时,你可能不需要做所有的“别名”,Elasticsearch有一些内置函数可以帮助你而不会冒出汗来!
例如,如果您索引以下文件:
{
"name": "Bowling Night"
}
默认情况下,name
字段将被保存为一个分析string
,这意味着Elasticsearch将令牌化和索引为你,所以当你运行此查询
{
"query": {
"query_string": "Where is bowling?"
}
}
这将打破一句成单独的词和每个词之间加一个“OR”条件,因此将匹配您的索引文件。它还会为文档提供一个分数,并根据分数进行排序,以防万一您有多个匹配项(匹配的词越多,得分越高)。
一些更多的信息有关query string queries和Analyzers
哇,我没想到的是,这太酷了,我不能给予好评还,但+1! –
只是试了一下,我被吹走了,这绝对是神奇的废话! –