【问题标题】:solr sunspot exact search for wordssolr 太阳黑子精确搜索词
【发布时间】:2012-06-22 09:02:40
【问题描述】:

我有大约 50 M 条推文的存档。我想看看其他用户是否互相提及。但是有问题:有一个名为 facebook (www.twitter.com/facebook) 的帐户。我想搜索那些提到这个帐户的推文,而不是简单地说 facebook。

所以我使用太阳黑子的语法是:

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 对我来说会有所帮助。顺便提一句。有没有办法查看这些工厂在我的语料库上生成了哪些令牌?

我的最后一个问题是我是否需要在更改标记器后重新建立索引?我的假设是肯定的。

干杯 托马斯

【问题讨论】:

    标签: ruby-on-rails ruby solr sunspot


    【解决方案1】:

    如果您可以在索引这些推文时解析哈希标签、转发推文、@name 等,并在 solr 中使用单独的字段,那么您将拥有更强大的搜索 (恕我直言)。

    如您所述,更改为空格标记器应该会有所帮助,并且您需要重新索引。您还需要在搜索期间使用相同的分词器、分析器。

    【讨论】:

    • 你是对的,我可能会为它们创建适当的数据库字段并将它们存储为推文的附加数据。似乎 Twitter 也在做,因为他们也可以报告推文中提到的“实体”。非常感谢!
    【解决方案2】:

    StandardTokenizerFactory 会抛出标点符号,除了句点后面没有空格。特别是,它会抛出“@”,因此您的@name 搜索注定要失败(就像搜索完整的电子邮件地址一样。虽然ClassicTokenizerFactory 保留了电子邮件地址,但我相信它仍然会从@name 中抛出“@”。

    WhitespaceTokenizerFactory 将保留 @name,但如果它后跟逗号(@name@name, 不同),它会以不同的方式处理它,因此它可能仍然不适合您。您可能最终想要使用 PatternTokenizerFactory,您可以在其中准确指定您希望如何通过正则表达式进行解析。

    【讨论】:

      猜你喜欢
      • 2014-03-29
      • 2014-05-30
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-04-24
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多