【问题标题】:Lucene.Net Product Keyword SearchLucene.Net 产品关键字搜索
【发布时间】:2012-06-26 04:03:37
【问题描述】:

我正在寻找产品搜索引擎。每个人都建议使用 Lucene.NET,但我想知道它是否按我的预期工作。我想为 Lucene 文档提供 MSSQL 数据库中的字段,以便可以搜索五个不同的产品字段。

1) 我可以从 SQL 数据库创建文档吗?​​

我能找到的所有样本都使用硬编码值。我想从数据库的五个产品列中填充文档。

如何设置 text var 以便它从数据库中获取特定字段中的所有内容?

Document doc = new Document();
doc.Add(new Field("id", i.ToString(), Field.Store.YES, Field.Index.NO));
doc.Add(new Field("ProductDescription", text, Field.Store.YES, Field.Index.TOKENIZED));
writer.AddDocument(doc);

2) 如何用一个查询搜索多个字段?

var queryParser = new QueryParser(Version.LUCENE_30, "ProductName", analyzer);
queryParser += new QueryParser(Version.LUCENE_30, "ProductDescription", analyzer);
queryParser += new QueryParser(Version.LUCENE_30, "ProductSpecification", analyzer);
queryParser += new QueryParser(Version.LUCENE_30, "ProductDetails", analyzer);
queryParser += new QueryParser(Version.LUCENE_30, "ProductKeywords", analyzer);

var query = queryParser.Parse("plasma tv");
//should return results for Sony Plasma TV, Sony HD Plasma, Sony 32 inch Plasma, Philips Plasma TV

有关于 MS SQL 到 Lucene 的教程吗?

【问题讨论】:

  • “每个人都建议使用 Lucene.NET”。我真的建议您使用 Solr。 Solr 是基于 Lucene 的 HTTP,在数据库索引方面表现出色,您无需编写任何代码。它可以被视为一个搜索服务器。当您使用 Solr 时,您将能够自己回答这两个问题。我知道你可能在 Lucene 上花了一些时间。只需下载 Solr 并尝试半天。让我知道反馈。
  • 有趣。这是我应该与我的 .Net 项目一起使用的站点:code.google.com/p/solrnet 用于 Solr 吗?
  • @Yavar 但据我所知,您必须在专用服务器上设置 Solr,这对于预算有限的项目来说可能有点开销

标签: sql-server-2008 search lucene lucene.net keyword


【解决方案1】:

要使用 Lucene.Net 搜索多个字段,您可以手动构造布尔查询并向其中添加单个字段查询,或者使用 MultiFieldQueryParser 为您构造布尔查询,或者使用query parser syntax。示例:

1) 手动构建,用于 2 个字段:

var query = new BooleanQuery();
Query nameQuery = 
     new QueryParser(Version.LUCENE_30, "ProductName", analyzer).Parse(keyword);
Query descriptionQuery = 
     new QueryParser(Version.LUCENE_30, "ProductDescription", analyzer).Parse(keyword);
query.Add(nameQuery, BooleanClause.Occur.SHOULD);
query.Add(descriptionQuery, BooleanClause.Occur.SHOULD);

2) 多字段查询解析器:

Query query = new MultiFieldQueryParser(                        
                            Version.LUCENE_30,   
                            new string[] { "ProductName", "ProductDescription" },
                            analyzer)
              .Parse(keyword);

【讨论】:

    【解决方案2】:

    也许你也可以试试 SQL Server 提供的全文搜索索引。

    【讨论】:

    • 这应该是评论而不是答案:)。用户的问题非常简单。他不是在征求建议。如果您需要提供一个,最好在 cmets 中提供。
    • 嗨 Gijo,我不能对这个客户使用全文搜索(出于政治原因)。还是谢谢。
    猜你喜欢
    • 1970-01-01
    • 2017-01-31
    • 2010-09-16
    • 1970-01-01
    • 2018-12-28
    • 2014-02-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多