2012-06-22 2 views
3

У меня есть архив ~ 50 M Tweets. Я хочу посмотреть, будут ли другие пользователи упоминать друг друга. Есть проблемы: есть учетная запись под названием facebook (www.twitter.com/facebook). Я хочу найти те твиты, которые упоминают эту учетную запись, и не просто сказать facebook.solr sunspot Точный поиск слов

Так что мой синтаксис с помощью солнечных пятен является:

search = FeedEntry.search do   
    without(:person_id,person.id) # No self referencing 
    fulltext "@#{person.username}" #Find those Feeds that mention this person 
    paginate :page => 1, :per_page => 1000000 #Make sure we dont paginate 
end 

Solr, кажется, пренебрегать @ знак полностью и даже при поиске ввода имени пользователя в «» или «» это не имеет значения.

search = FeedEntry.search{fulltext "facebook -RT"} 
=> <Sunspot::Search:{:start=>0, :defType=>"dismax", :fq=>["type:FeedEntry"], :rows=>30, :q=>"facebook -RT", :fl=>"* score", :qf=>"retweeters_text text_text"}> 
>> search.total 
=> 299525 

Что я могу сделать? Я должен пройти эти результаты и использовать ruby ​​«include?» @facebook », чтобы разобраться с ложными срабатываниями, которые занимают много времени.

У меня есть подозрение, что это связано с фабриками токенизатора, которые я использую: http://wiki.apache.org/solr/AnalyzersTokenizersTokenFilters#solr.KeywordTokenizerFactory

Мой конфиг в schema.xml является:

<fieldType name="text" class="solr.TextField" omitNorms="false"> 
     <analyzer> 
     <tokenizer class="solr.StandardTokenizerFactory"/> 
     <filter class="solr.StandardFilterFactory"/> 
     <filter class="solr.LowerCaseFilterFactory"/> 
     </analyzer> 
    </fieldType> 

Я думаю, что изменение StandardTokenizerFactory к WhitespaceTokenizerFactory бы помочь в моем случае Btw есть способ, чтобы увидеть, какие жетоны этих заводов, производимых на моем корпусе.. ?

Мой последний вопрос: нужна ли переиндексация после изменения токенизатора? Мое предположение - да.

Приветствие Томас

ответ

0

Если вы можете разобрать хэш-тег, повторное чириканье, @name и т.д., как вы проиндексировать эти твит и использовать отдельные поля в Solr, то вы будете иметь более мощный поиск (ИМХО).

Изменение указателя на пробелы должно помочь, как вы отметили, и вам нужно будет переиндексировать. Вам также нужно будет использовать тот же токенизатор, анализатор во время поиска.

+0

Вы правы Я могу создать для них соответствующие поля db и сохранить их в качестве дополнительных данных для твита. Кажется, что и то, что делает Twitter, так как они могут сообщите " сущности ", упомянутые в твитах. Большое спасибо! – plotti

0

StandardTokenizerFactory выдает знаки препинания, за исключением периода, за которым не следуют пробелы. В частности, он выбрасывает «@», поэтому ваш поиск @name обречен (как и поиски полных адресов электронной почты. В то время как ClassicTokenizerFactory сохраняет адреса электронной почты, я считаю, что он все еще выбрасывает «@» из @name.

WhitespaceTokenizerFactory сохранит @name, но будет обрабатывать его по-другому, если за ним следует запятая (@name - это не то же самое, что и @name,), так что это может быть не совсем правильно для вас. Возможно, вы захотите использовать PatternTokenizerFactory, где вы точно определяете, как вы хотите анализировать с помощью регулярных выражений.

Смежные вопросы