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 queriesAnalyzers

+0

哇,我没想到的是,这太酷了,我不能给予好评还,但+1! –

+0

只是试了一下,我被吹走了,这绝对是神奇的废话! –