代码之家  ›  专栏  ›  技术社区  ›  devson

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

  •  13
  • devson  · 技术社区  · 15 年前

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

    3 回复  |  直到 11 年前
        1
  •  10
  •   Oybek    11 年前

    如果不提供字段名,则无法搜索内容, 但是,您可以使用多字段查询分析器在所有可用字段中进行搜索。

    例如

    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
    

    希望帮助

        2
  •  1
  •   Kevin Peterson    15 年前

    它将搜索模式中指定的默认搜索字段。

        3
  •  1
  •   KenE    15 年前

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

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