在Solr上为搜索结果实现SVD算法的最简单方法是什么?

时间:2017-07-03 09:48:33

标签: solr mahout svd

我在http://localhost:8983/solr上创建了自己的核心,并添加了一些文档,以便查询。但当我查询类似" dog"之类的内容时,我希望那些包含" pooch"也会被退回。所以我想实现SVD算法来改进我的结果。 因为我是搜索引擎的新手。我所知道的是我可以使用Mahout来实现SVD,但似乎有点困难因为我必须安装Maven,Hadoop和Mahout。 任何建议将不胜感激。

2 个答案:

答案 0 :(得分:1)

您可以使用SynonymGraphFilterFactory

  

此过滤器映射单个或多个令牌同义词,从而生成完全正确的图形输出。此过滤器是同义词过滤器的替代品,它会为多标记同义词生成不正确的图形。

     

如果您在索引编制过程中使用此过滤器,则必须使用展平图形过滤器跟随它,以便像同义词过滤器一样将标记压在另一个上面。

在目录mysynonyms.txt中创建your_collection/conf/文件,并将同义词放在=>符号

pooch,pup,fido => dog
huge,ginormous,humungous => large

示例架构将是:

<analyzer type="index">
  <tokenizer class="solr.StandardTokenizerFactory"/>
  <filter class="solr.SynonymGraphFilterFactory" synonyms="mysynonyms.txt"/>
  <filter class="solr.FlattenGraphFilterFactory"/> <!-- required on index analyzers after graph filters -->
</analyzer>
<analyzer type="query">
  <tokenizer class="solr.StandardTokenizerFactory"/>
  <filter class="solr.SynonymGraphFilterFactory" synonyms="mysynonyms.txt"/>
</analyzer>

来源:https://cwiki.apache.org/confluence/display/solr/Filter+Descriptions

答案 1 :(得分:1)

这是使用不在内容中的术语来扩充索引的另一种方法。 @ashraful说,同义词很好。但是你会遇到另外两个问题:

  1. 使用但不在同义词列表中的字词

  2. 行为搜索:使用其他用户行为作为他们所寻找内容的提示

  3. 这些要求您使用从1)其他搜索中学习的术语来扩充索引,以及2)用户行为。 Mahout的相关交叉发生算法可以帮助两者。您可以将其设置为查找导致人们阅读项目的条款,以及(如果您有购买或其他偏好数据等内容)转化项目与索引中的项目相关联。在第二种情况下,您可以将用户转换添加到搜索查询中以个性化结果。

    关于此技术的博客:http://actionml.com/blog/personalized_search 关于Mahout的页面文档:http://mahout.apache.org/users/algorithms/intro-cooccurrence-spark.html

    你还应该看一下word2vec,它会(给出正确的训练数据)发现“dog”和“pooch”是同义词而不管同义词列表,因为它是从数据中学习的。我不确定你如何将word2vec添加到Solr中,但它已集成到Lucid的闭源产品Fusion中。