从特定字段lucene.net获取可用值

时间:2012-06-11 12:23:24

标签: c# lucene.net

例如,如果我的lucene索引中有一个字段被称为“颜色”。当然它的价值也不同。

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

Lucene版本是Version.LUCENE_29。

编辑:找到解决方案,Find all available values for a field in 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());
    }
}

干杯, 托米。

1 个答案:

答案 0 :(得分: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