繁体   English   中英

Lucene.Net多字搜索多字段和外卡使用和短语搜索,模糊搜索全部

[英]Lucene.Net multiple word search on multiple field and wild card use and phrase search, fuzzy search all

我是lucene.net的新手。 我使用lucene.net索引多个字段的数据。 这样我就做了索引数据

                    Document doc = new Document();
                    doc.Add(new Field("ID", oData.ID.ToString() + "_" + oData.Type, Field.Store.YES, Field.Index.UN_TOKENIZED));
                    doc.Add(new Field("Title", oData.Title, Field.Store.YES, Field.Index.TOKENIZED));
                    doc.Add(new Field("Description", oData.Description, Field.Store.YES, Field.Index.TOKENIZED));
                    doc.Add(new Field("Url", oData.Url, Field.Store.YES, Field.Index.TOKENIZED));
                    writer.AddDocument(doc);

现在用户搜索时用户可以输入奥迪BMW ECU等数据

1)第一次我希望像[奥迪] [宝马] [ECU]这样的每个单词都应该搜索标题,描述,网址等索引字段。 每个单词应该搜索3个字段,称为title,description,url 所以我需要做什么。 我需要写什么代码。

2)第二次使用短语“ Audi BMW ECU ”来搜索标题,描述,url字段。

3)用户在搜索奥迪BMW ECU *或奥迪BMW ECU时可能会使用输入外卡吗? 4)我想添加模糊搜索和多字搜索,这样如果用户拼写错误,那么结果也会出现。

请指导我如何在我的代码和例程中添加所有逻辑和功能,因为我得到了各种用户输入的结果。

如果可能的话,详细讨论这个问题。

您可以使用QueryParser类将用户提供的查询解析为Lucene Query对象树。 还有一个MultiFieldQueryParser ,它将生成在多个字段中搜索的查询。 这符合您的要求。

var fields = new[] { "Title", "Description", "Url" };
var analyzer = new StandardAnalyzer(Version.LUCENE_30);
var queryParser = new MultiFieldQueryParser(Version.LUCENE_30, fields, analyzer);
var query = queryParser.Parse("Audi BMW ECU");

生成的查询看起来像(Title:audi Description:audi Url:audi) (Title:bmw Description:bmw Url:bmw) (Title:ecu Description:ecu Url:ecu)

您可以让用户通过用引号括住短语来构建短语查询。 这是Lucene中的标准查询格式。

var fields = new[] { "Title", "Description", "Url" };
var analyzer = new StandardAnalyzer(Version.LUCENE_30);
var queryParser = new MultiFieldQueryParser(Version.LUCENE_30, fields, analyzer);
var query = queryParser.Parse("\"Audi BMW ECU\"");

这个生成的查询看起来像Title:"audi bmw ecu" Description:"audi bmw ecu" Url:"audi bmw ecu"

QueryParser还支持使用*?通配符查询 如你所愿。 还支持模糊搜索; “奥迪〜0.5”。 还有其他几种查询类型,例如邻近搜索和术语提升。 Query Parser语法文档中提供了所有内容。

添加功能以帮助用户使用拼写错误的单词是一项更大的任务。 您可以将查询重写为模糊搜索,但这会禁用任何启用的分析器(因此任何词干都会被禁用)。 您还可以通过将查询重写为具有更多匹配项的类似查询来尝试不同的“无所谓”解决方案。 这里有很多可以尝试的东西。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM