我正在构建一个问题机器人,到现在为止我正在使用mongodb。然而,我刚刚发现了弹性搜索,它看起来非常强大。
我有一个“别名文档”数据库,这意味着每个文档都有一个“别名”字段,该字段是某个人可能称之为可能名称的数组。
例如:
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中是否有可以执行此类操作的查询?
答案 0 :(得分:0)
您可能不需要执行所有'别名'正如你所说的那样,Elasticsearch有一些内置的功能,可以帮助你而不会出汗!
例如,如果您索引以下文档:
{
"name": "Bowling Night"
}
默认情况下,name
字段将保存为已分析的string
,这意味着Elasticsearch会为您标记并为其编制索引,因此当您运行此查询时
{
"query": {
"query_string": "Where is bowling?"
}
}
它会将句子分成单独的单词并添加一个“OR”。每个单词之间的条件因此将匹配您索引的文档。它还将提供文档的分数,并根据分数进行排序,以防您有多个匹配(分数越高,分数越高)。
的更多信息