string - 在Elasticsearch中对关键字查询的句子

标签 string mongodb elasticsearch database

我正在构建一个问题机器人,直到现在我一直在使用mongodb。但是我只是发现了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 queriesAnalyzers的更多信息

关于string - 在Elasticsearch中对关键字查询的句子,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38708198/

相关文章:

java - 如何从字符串中删除多个换行符

c# - C#中的模糊文本(句子/标题)匹配

c - 从 C 中的不规则字符串中获取所有整数

搜索单个 "starred"术语时,Elasticsearch 为所有结果输出 1.0 的分数

python - 我可以从外部类的类方法中调用内部类吗?

C#:如何用\替换\\

java - 如何在Java中的mongojack中使用elemmatch

Node.js 和 Passport 对象没有方法 validPassword

python - 如何使用PyMongo批量删除记录

elasticsearch - 如何从 Elastic Search 中的 query_string 中排除 id 数组?