2016-08-01 71 views
0

我正在構建一個問題機器人,直到現在我正在使用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中有一個查詢可以做這樣的事情嗎?

回答

0

當你調用它時,你可能不需要做所有的「別名」,Elasticsearch有一些內置函數可以幫助你而不會冒出汗來!

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

{ 
    "name": "Bowling Night" 
} 

默認情況下,name字段將被保存爲一個分析string,這意味着Elasticsearch將令牌化和索引爲你,所以當你運行此查詢

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

這將打破一句成單獨的詞和每個詞之間加一個「OR」條件,因此將匹配您的索引文件。它還會爲文檔提供一個分數,並根據分數進行排序,以防萬一您有多個匹配項(匹配的詞越多,得分越高)。

一些更多的信息有關query string queriesAnalyzers

+0

哇,我沒想到的是,這太酷了,我不能給予好評還,但+1! –

+0

只是試了一下,我被吹走了,這絕對是神奇的廢話! –