0

例如,如果我的 lucene 索引中有一个名为“color”的字段。当然,它的价值是不同的。

然后我有一个带有下拉列表的“高级搜索页面”,在该下拉列表中,我想显示“颜色”字段包含的所有可用值(不同的)。

Lucene 版本是 Version.LUCENE_29。

编辑:找到解决方案,在 lucene .net 中查找字段的所有可用值

   private List<string> GetAvailableFields(string fieldName)
   {
       List<string> fieldValues;

       using (var readerRepository = new LucineRepository(RepositoryPath))
       {
           var reader = readerRepository.Reader;
           fieldValues = reader.UniqueTermsFromField(fieldName).ToList(); 
           reader.Close();
       }

       return fieldValues;
   }

public static class ReaderExtentions
{
    public static IEnumerable<string> UniqueTermsFromField(this IndexReader reader, string field)
    {
        var termEnum = reader.Terms(new Term(field));

        do
        {
            var currentTerm = termEnum.Term();

            if (currentTerm.Field() != field)
                yield break;

            yield return currentTerm.Text();
        } while (termEnum.Next());
    }
}

干杯,汤米。

4

1 回答 1

0

Lucene 不提供“独特”的功能。

你必须编写自己的代码来实现这一点

你可以试试下面的代码片段:

var document = new Document();
document.Add(new Field("color", "foo", Field.Store.YES, Field.Index.NOT_ANALYZED));
...

TermEnum terms = indexReader.Terms(new Term("color"));
// enumerate the colors
于 2012-06-11T12:29:50.093 回答