这更像是一个理论问题,而不是实践。我正在开发一个项目,这是一个非常简单的链接目录。整个模型类似于Dmoz或Yahoo目录,除了每个条目都有一些额外的属性。
我有层次分类法处理所有具有多对多关系的条目,所有条目现在都分类到这些类别中,一切似乎都正常。现在,如果没有搜索选项,目录有什么用?
以下是关于我的模型的更多细节:每个条目都有标题,描述,URL和一些社交个人资料:YouTube,Twitter,Flickr和其他几个。每个条目都可以附加一个徽标,以及一个隐藏的标记字段。此外,标题和描述以三种不同的语言存储。所以基本上我希望搜索结果是:
我已经尝试过Sphinx并且目前正在与Lucene合作,但似乎我在理论上没有得到正确的搜索。我希望填充的条目看起来应该高于其他条目,但我无法弄清楚得分。如果整个描述中只有一个单词匹配,我不希望不相关的条目出现在顶部,因为标题更相关。
所以我的问题是 - 是否有任何书籍,技术或其他搜索引擎(如果Sphinx和Lucene不够好)你会推荐这个问题 ?我不仅希望完全控制搜索结果及其排名,还能为访问者提供正确且相关的信息。
很酷的文章链接也很受欢迎!
否,我不是要重建Google:)
谢谢:)
答案 0 :(得分:5)
优秀的书:Lucene in Action (2nd edition)
当我们开始使用Lucene时,我们有了第一版,它会让您逐步完成所需的一切。强烈推荐。第2版更新为最新版本(3.x.x)。
Tf-Idf算法在(较大的)文本上运行得非常好,但是如果你有类似记录的结构,它可能适得其反:具有少量术语的文档被认为比具有多个术语的文档更“相关” 。使用Lucene,你会得到它的工作,但你必须弄脏你的手。
你基本上要做的是boost your title field,所以它变得更加相关。您也可以change the scoring mechanism为拥有更多信息的文档分配更高的分数。
玩得开心。如果你无法弄明白,Lucene mailinglist就有很好的支持。
答案 1 :(得分:4)
我很确定Lucene就足够了。我们已经解决了类似的任务并且做得很好。以下是一些提示,我建议您回顾一下我在Lucene.Net的项目。
分类
不可搜索的字段(徽标,社交个人资料):
三种语言和多个字段:
答案 2 :(得分:2)
我将尝试添加Matthijs,Dewfy和Karussell的精美答案。 基本上,您正在尝试提高搜索相关性。 我建议你阅读Grant Ingersoll的Debugging Search Application Relevance Issues和他的Optimizing Findability in Lucene and Solr,以及他的Practical Relevance slides。
对于不同的语言和分面,我建议您使用Solr。它是一个使用Lucene构建的搜索引擎,易于使用。它可以通过对每种语言使用不同的Solr Core来支持多种语言。
答案 3 :(得分:1)
Lucene或Solr会做这个工作。 Solr建立在lucene see here for more info
之上我会选择solr。下载+设置简单快捷。开始使用本教程和我的link collection。使用solr可以很好地使用相关性并且很容易调整。
看看Dewfy和Matthijs Bierman的一些好点。
然后选择dismax查询处理程序,您可以选择具有特定属性的文档。
E.g。对于完整配置文件的百分比,您可以定义一个单独的字段'profile_completness',然后您可以将profile_completeness添加到dismax处理程序的bf(boostfunction):配置文件越完整,这些文档将被提升得越多。
我之前提到您可以轻松调整相关性:例如你可以设置bf到某事。喜欢:bf=title^10 tags^5 profile_completeness^1
“可能带有徽标的”可以通过提升查询来解决:bq=logo:[* TO *]^1
。其中logo:[* TO *]
表示“仅包含字段徽标的文档”
要显示深层嵌套的类别树,您需要在内存中创建该树,并使用特殊导入来提供solr。我们有一个工作的应用程序。您可以使用our approach
如果您需要进一步的帮助,请随时发表评论。