在Elasticsearch中判断关键字查询

时间:2016-08-01 21:11:31

标签: string mongodb elasticsearch database

我正在构建一个问题机器人,到现在为止我正在使用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中是否有可以执行此类操作的查询?

1 个答案:

答案 0 :(得分:0)

您可能不需要执行所有'别名'正如你所说的那样,Elasticsearch有一些内置的功能,可以帮助你而不会出汗!

例如,如果您索引以下文档:

{
   "name": "Bowling Night"
}

默认情况下,name字段将保存为已分析的string,这意味着Elasticsearch会为您标记并为其编制索引,因此当您运行此查询时

{
  "query": {
    "query_string": "Where is bowling?"
  }
}

它会将句子分成单独的单词并添加一个“OR”。每个单词之间的条件因此将匹配您索引的文档。它还将提供文档的分数,并根据分数进行排序,以防您有多个匹配(分数越高,分数越高)。

有关query string queriesAnalyzers

的更多信息