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