2015-11-15 51 views
0

我需要一個MySQL查詢以從包含指定搜索詞的文本列中返回完整句子。MySQL查詢返回包含文本列中搜索詞的句子

目前我能夠在20個字符前和使用該查詢的搜索詞後,得到:

select id, MID(body,(LOCATE('search_word', body)-20),40) from content where body like "%search_word%" limit 1 

,但是這是據我已經得到了。

我想得到一個包含我的搜索詞的整個句子(兩個點之間)。

任何想法?正則表達式?我如何去做這件事?

+1

如果句子中包含「點」,該怎麼辦?語言分析是一件不平凡的事情。 – David

+0

不會太在意。儘可能接近它對我來說已經足夠了。 – jjj

回答

1

爲什麼你不只是用mysql獲得整個領域,並用實際的編程語言過濾出這個句子。

一個JavaScript例子是這樣的:https://jsfiddle.net/n0wfgjoc/

var text = "Lorem Ipsum is simply dummy text ... versions of Lorem Ipsum."; 

var search = "popularised in the"; 
var pattern = new RegExp('\. ([^.]*' + search + '[^.]*\.)', 'i'); 

document.getElementsByTagName('body')[0].innerHTML = text.match(pattern)[1]; 

你不應該的hve適應我您的需求的問題 - 和您的語言。

它應該比在純SQL中做這個要好得多。

編輯:

正如@大衛指出,這可能是一個問題,如果有在其他環境中使用的文字點 - 爲縮寫或日期可能。

解決這將是一項艱鉅的任務。我的例子不包含該用例。

+0

我在db中有120m +的記錄,保存在txt字段中的很多文章都是幾頁長的段落。因此,我只想從數據庫中返回相關的句子。要完成全文返回,然後將每篇完整文章傳遞給代碼並以編程方式解析它,可能會成爲巨大的內存過載。無論如何,非常感謝您的努力。我想我應該說在我的例子中,但我特別要求MySQL查詢。 – jjj

+0

記錄的數量並沒有改變事實,即SQL是一種查詢語言。過於複雜的操作不應該在SQL中完成,而應使用適合編程語言的更高性能的字符串運算符。在mysql中有一個REGEX操作符,也許你想嘗試一下(https://stackoverflow.com/questions/9099469/mysql-select-like-or-regexp-to-match-multiple-words-in-one-record )。但是@David指出的問題仍然存在:即使你完成了自己的任務,即使你能忍受糟糕的表現,也可能有點不意味着句子結束。 –

+0

有了你描述的大量數據,我認爲,沒有必要評估所有的生活:我會建議通過「LIKE%...%」選擇文章,用適當的編程語言評估每一篇文章,商店已經看過在一個緩存表中添加文本片段。 –

相關問題