2015-11-07 49 views
1

我想知道是否可以使用可能包含或不包含可查詢文本的字符串執行Rails ActiveRecord查詢。Rails使用全文查詢記錄

例如,讓我們說我有一個Person模型與name列,其中包含有記錄的BobFred名。我想知道是否有某種方式可以解析以下內容:

我今天和Bob和Martha共進午餐。弗雷德很忙。

與此BobFred記錄將被退回,而瑪莎也不會因爲該名稱的記錄不存在。我想這個查詢本身看起來像Person.where('name IN (?)', ['Bob', 'Fred'])

在尋找答案時,我遇到了模糊搜索,但它看起來更像是尋找與特定查詢最接近的匹配項(catz - >cats)。這是正確的,或者我可以實際上使用模糊搜索長字符串查詢?

+0

不會更容易去其他方式和Person.all比grep每個人對你的文本。 –

+0

@MikeK。不,這是非常低效的 – sjagr

+0

每次記錄下來的每一個記錄都不會下降? –

回答

1

我覺得這個問題在很高的層次上是知道哪一個措辭是一個名字,哪一個不是。

例如...在:

I am having lunch with Bob and Martha today. Fred is busy. 

有3名。我們知道,因爲我們知道Fred,BobMartha是名字。

如果某人的名字是Lunch怎麼辦?

在這方面,我認爲將句子分解爲所有單詞的數組,並且做一個查詢,其中name是任何一個單詞都是很好的選擇。

所以,在I am having lunch with Bob and Martha today. Fred is busy,你可以得到句子的排列爲:

word_array = %w(I am having lunch with Bob and Martha today. Fred is busy) 

,然後執行一個查詢來獲取記錄,其中名稱是任何上述的:

Person.where('name IN (?)', word_array) 

一更多的事情:你可能希望use gsub在轉換到數組之前首先刪除逗號(,)和句點(。)。

希望這會有所幫助...

+0

我認爲這可能有效。至少在我的情景中,我不指望在巨大的段落中搜索 - 只是像上面這樣簡短的小句子。謝謝!我會給它一個旋風。 –