的 您可以使用 SynonymGraphFilterFactory 强>
SynonymGraphFilterFactory
此过滤器映射单个或多个令牌同义词,从而生成完全正确的图形输出。此过滤器是同义词过滤器的替代,它会为多标记同义词生成不正确的图形。 如果在索引编制期间使用此过滤器,则必须使用展平图形过滤器跟随它,以便像同义词过滤器一样将标记压在另一个上面。
此过滤器映射单个或多个令牌同义词,从而生成完全正确的图形输出。此过滤器是同义词过滤器的替代,它会为多标记同义词生成不正确的图形。
如果在索引编制期间使用此过滤器,则必须使用展平图形过滤器跟随它,以便像同义词过滤器一样将标记压在另一个上面。
创建一个文件,即 mysynonyms.txt 在目录中 your_collection/conf/ 并把同义词 => 标志
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
这是使用不在内容中的术语来扩充索引的另一种方法。 @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中。