0

我正在寻找产品搜索引擎。每个人都建议使用 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 的教程吗?

4

2 回答 2

0

要使用 Lucene.Net 搜索多个字段,您可以手动构造布尔查询并向其中添加单个字段查询,或者使用 MultiFieldQueryParser 为您构造布尔查询,或者使用查询解析器语法。例子:

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);
于 2012-06-26T15:10:04.983 回答
-1

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

于 2012-06-26T04:11:21.243 回答