【问题标题】:In lucene.net can we search for a content without giving field name..and it will search in all fields that are indexed?在 lucene.net 中,我们可以在不提供字段名称的情况下搜索内容吗?它会搜索所有被索引的字段吗?
【发布时间】:2010-11-14 06:43:57
【问题描述】:

在 lucene.net 中我们可以在不提供字段名称的情况下搜索内容..它会搜索所有被索引的字段。

【问题讨论】:

    标签: lucene.net


    【解决方案1】:

    它将默认搜索架构中指定的所有字段。

    【讨论】:

    • 能否请您提供代码 sn-p,syntax..了解如何编写查询。
    【解决方案2】:

    使用MultiFieldQueryParser 解析您的查询,并为它提供您要搜索的字段名称数组。

    查询不需要任何特殊语法。如果您的查询是“cat hat”,它将在所有指定字段中搜索这些术语中的任何一个。如果您的默认运算符是 AND,则需要在至少一个字段中找到每个术语。

    【讨论】:

    • 作者特别提到没有给出字段名。
    【解决方案3】:

    如果不提供字段名称,您将无法搜索内容,但是您可以使用 MultiFieldQueryParser 在所有可用字段中进行搜索。

    例如

    Dim queryParser = New MultiFieldQueryParser(Version.LUCENE_29, _
        indexReader__1.GetFieldNames(IndexReader.FieldOption.ALL).ToArray(), analyzer)
    

    这是一个完整的例子。

    'get index directory
    Dim directory As Directory = FSDirectory.Open(New DirectoryInfo(HostingEnvironment.MapPath(VirtualIndexPath)))
    
    'get analyzer
    Dim analyzer As Analyzer = New StandardAnalyzer(Version.LUCENE_29)
    
    'get index reader and searcher
    Dim indexReader__1 As IndexReader = IndexReader.Open(directory, True)
    Dim indexSearch As Searcher = New IndexSearcher(indexReader__1)
    
    'add all possible fileds in multifieldqueryparser using indexreader getFieldNames method
    Dim queryParser = New MultiFieldQueryParser(Version.LUCENE_29, _
        indexReader__1.GetFieldNames(IndexReader.FieldOption.ALL).ToArray(), analyzer)
    Dim query = queryParser.Parse(Criteria)
    Dim resultDocs As TopDocs = Nothing
    
    'perform search
    resultDocs = indexSearch.Search(query, indexReader__1.MaxDoc())
    Dim hits = resultDocs.scoreDocs
    

    希望有所帮助

    【讨论】:

    • 这非常有帮助,并且应该被标记为这个问题的答案,因为我已经尝试过并且它有效!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-12-16
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多