【问题标题】:Lucene.NET query + highlightingLucene.NET 查询 + 高亮显示
【发布时间】:2011-06-10 05:36:11
【问题描述】:

我正在使用 Umbraco 并遇到了 Lucene。我在 Lucene 上找到了很多代码和文章,但我仍然无法建立一个可以接受的搜索。

我有许多字段可供搜索,例如。 “nodeName”和“bodyText”

我需要什么:

  • 当我搜索“男鞋”时,它应该只返回同时包含“男鞋”和“鞋子”的结果,而且还会返回一个页面,其中nodeName只有“鞋子”,bodyText只有“男人”。

  • 当我搜索“鞋子”时,我想要包含“鞋子”或“鞋子”的结果。但如果可能,不要“锄头”

  • 提升 nodeName 字段

  • 获取包含匹配词的 bodyText 的 sn-p

  • 在页面名称和 bodyText 的 sn-p 上突出显示匹配的单词

有人做过吗?

【问题讨论】:

  • 是的,Lucene 可以满足您的所有需求,而且更多。但是,由于您似乎是新手,我建议您使用 Apache Solr(它是一个围绕 Lucene 构建的搜索服务器,提供许多开箱即用的功能,而无需修补内部结构。
  • 谢谢。我如何将它与 Umbraco 一起使用...?

标签: lucene lucene.net umbraco


【解决方案1】:

这可能会让你开始。

var manager = ExamineManager.Instance;
var searcher = manager.SearchProviderCollection["YOURSearcher"];
var query = manager.SearchProviderCollection["YOURSearcher"].CreateSearchCriteria(BooleanOperation.Or)
   .Field("nodeName", keywords.Boost(10))
   .Or().Field("nodeName", keywords.Fuzzy())
   .Or().Field("bodyContent", keywords.Boost(5))
   .Or().Field("otherField", keywords.Boost(3));
var results = searcher.Search(query.Compile());

【讨论】:

  • 谢谢基兰!什么是关键词?这不是字符串是吗?因为字符串没有Boost方法。
  • 是字符串的扩展,必须使用Examine.LuceneEngine.SearchCriteria;
  • 当我搜索多个单词时,它永远不会返回任何结果
【解决方案2】:

Jonathan Lathigee 的代码有效,这是迄今为止我能找到的最像 google 的代码

http://our.umbraco.org/forum/developers/extending-umbraco/19329-Search-multiple-fields-for-multiple-terms-with-examine?p=0

【讨论】:

    猜你喜欢
    • 2011-12-01
    • 2011-12-13
    • 2011-07-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-04-07
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多