【问题标题】:Lucene.Net multiple word search on multiple field and wild card use and phrase search, fuzzy search allLucene.Net 多字段多词搜索和通配符使用和短语搜索,模糊搜索全部
【发布时间】:2012-07-05 14:48:22
【问题描述】:

我对 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);

现在当用户搜索时,用户可以输入数据,例如 奥迪宝马ECU

1) 第一次我希望像 [Audi] [BMW] [ECU] 这样的每个单词都应该搜索我索引的字段,例如 title,description,url 。每个单词都应搜索名为 title,description,url 的 3 个字段。所以我需要做什么。我需要写什么代码。

2) 第二次应针对 title、description、url 字段搜索短语“Audi BMW ECU”。

3) 用户在搜索 Audi BMW ECU* 或 Audi BMW ECU? 时可以使用输入通配符 4) 我想添加模糊搜索和多词搜索,所以如果用户拼写错误,结果也会出现。

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

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

【问题讨论】:

    标签: c# lucene lucene.net


    【解决方案1】:

    您可以使用 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 Syntax 文档中提供了所有内容。

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

    【讨论】:

      猜你喜欢
      • 2011-05-02
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-03-16
      • 1970-01-01
      • 2015-12-16
      相关资源
      最近更新 更多