2012-05-13 4 views
-1

У меня есть большая коллекция твитов, хранящихся в MongoDB. Твиты выглядеть как этот:Запрос MongoDB с ключевым словом

"_id" : ObjectId("4c02c58de500fe1be1000005"), 
"contributors" : null, 
"text" : "Hello world", 
"user" : { 
    "following" : null, 
    "followers_count" : 5, 
    "utc_offset" : null, 
    "location" : "", 
    "profile_text_color" : "000000", 
    "friends_count" : 11, 
    "profile_link_color" : "0000ff", 
    "verified" : false, 
    "protected" : false, 
    "url" : null, 
    "contributors_enabled" : false, 
    "created_at" : "Sun May 30 18:47:06 +0000 2010", 
    "geo_enabled" : false, 
    "profile_sidebar_border_color" : "87bc44", 
    "statuses_count" : 13, 
    "favourites_count" : 0, 
    "description" : "", 
    "notifications" : null, 
    "profile_background_tile" : false, 
    "lang" : "en", 
    "id" : 149978111, 
    "time_zone" : null, 
    "profile_sidebar_fill_color" : "e0ff92" 
}, 
"geo" : null, 
"coordinates" : null, 
"in_reply_to_user_id" : 149183152, 
"place" : null, 
"created_at" : "Sun May 30 20:07:35 +0000 2010", 
"source" : "web", 
"in_reply_to_status_id" : { 
    "floatApprox" : 15061797850 
}, 
"truncated" : false, 
"favorited" : false, 
"id" : { 
    "floatApprox" : 15061838001 

Например, если я хочу найти твиты о какой-то теме, например, канон, то как я должен написать запрос, который проверяет «текст» и находит все твиты о «каноне «?

+0

Спасибо, я не знал, как это выглядит так) –

+0

Вы просто выделите его и нажмите кнопку «Пример кода» на верхней панели инструментов. Ему нужно 4 отступов пространства, чтобы быть «кодом» – jdi

+0

-1 для того, чтобы задать вопрос, не сделав нулевого исследования. –

ответ

1

У MongoDB нет прямой поддержки запросов для поиска в тексте. Существует официальная документация показывает вам, как вы можете достичь простого подхода к полнотекстовому поиску:
http://www.mongodb.org/display/DOCS/Full+Text+Search+in+Mongo

Она включает разделив текст на слова, и хранить их в массиве, который вы индекс. Это позволяет сопоставлять содержимое массива. Как вы их разделяете, это ваш выбор. Возможно, вы просто делаете слова, строчные буквы и сопоставляете ключевые слова нижнего регистра. Или, может быть, вам нужна автозаполнение, поэтому вы делаете вариации каждого слова, фонетики и т. Д. Это все.

Его не столь надежная, как полнотекстовая поисковая система, предназначенная для этого, но она работает. В зависимости от языка, который вы используете, некоторые фреймворки имеют поисковые пакеты. Например, я использую mongodb с django's nonrel project, и есть search app для того, что обеспечивает создание и другой инструмент для поиска.

+0

Я использую Ruby, так что я могу выполнить поиск с Ruby? Это только в MogoDB. Мне нужно разделить текст на ключевые слова, но у меня есть большая коллекция твитов, поэтому кажется нереальным разбить их все ((( –

+0

@DulosAdam: вам нужно будет искать пакет Ruby, который предоставляет это. В противном случае вы должны сделать это вручную. Каждый раз, когда вы изменяете документ/поле, вам нужно переиндексировать, используя любой метод стерилизации, который вы решите. Прочитайте эту ссылку, которую я опубликовал, чтобы посмотреть, как вы это делаете. – jdi

+0

@DulosAdam: It может показаться нереальным, но это то, что вам нужно было бы сделать. Вы сами решаете, какие поля вы хотите индексировать. Затем вы разделите их так, как вы хотите, возможно, в частном поле. И вы убедитесь, что в нем указано значение Endex. Именно так вы должны это делать В пакете поиска django они фактически создают коллекцию отношений для хранения индексированных слов отдельно от оригинального документа. – jdi