如何在Nhibernate.Search中添加数字字段?

如何在Nhibernate.Search中添加数字字段?,nhibernate,lucene.net,nhibernate.search,Nhibernate,Lucene.net,Nhibernate.search,最近,我假设Nhibernate.Search会将类上的整数属性作为数字字段进行索引 [Indexed] public class Location : Entity { [IndexedEmbedded(Depth = 1, Prefix = "Country_")] public virtual Country Country { get; set; } [Field(Index.Tokenized)] public virtual string Name {

最近,我假设Nhibernate.Search会将类上的整数属性作为数字字段进行索引

[Indexed]
public class Location : Entity
{
    [IndexedEmbedded(Depth = 1, Prefix = "Country_")]
    public virtual Country Country { get; set; }
    [Field(Index.Tokenized)]
    public virtual string Name { get; set; }
    [Field(Index.Tokenized)]
    public virtual string AlternativeNames { get; set; }
    [Field(Index.Tokenized)]
    public virtual string OriginalNames { get; set; }
    [Field(Index.UnTokenized)]
    public virtual string LocationType { get; set; }
    [Field()]
    public virtual int? Population   { get; set; }
}
但当我为查询设置排序时,如下所示:

 var words = query.Split(' ');

        var luceneQuery = string.Join(" AND ", words.Select(x => "Name:{0}*".F(x)));
        luceneQuery += " AND LocationType:locality";
        var results = search.CreateFullTextQuery<Location>(luceneQuery)
           .SetSort(new Sort(new SortField("Population", CultureInfo.CurrentCulture, true)))
            .SetMaxResults(100)
            .List<Location>();
所以我的问题是,当Nhibernate.Search将其视为一个文本字段时,我如何将其更改为一个数字字段,是否可以转换,或者是否必须对每个记录重新编制索引。其中340公里

我开始感觉到Nhibernate的便利性。如果不能做到这一点,搜索就会丢失。也许我必须重新开始,使用普通的Lucene.Net


感谢您的帮助

更新

可能的有用链接:

  • -这不就是你想要的吗?所描述的示例允许通过各种数值和范围进行搜索

我认为您关于数值搜索和范围搜索的两个问题都可以在这里解决:

因为ApacheLucene是一个全文搜索引擎,而不是一个 传统数据库无法处理数字范围(如字段 值在用户定义的范围内,即使日期也是数值)。 我们开发了ApacheLucene的一个扩展,用于存储 带有变量的特殊字符串编码格式的数值 精度(称为trie,所有数值如双精度、长度、, 日期、浮点数和整数转换为字典排序字符串 表示和索引的精度不同)

数字字段可以排序(包含一个特殊的解析器)并用于函数查询(通过)

我还通过以下途径找到了
LongClass.java
实现:

我实现了一个“LongField”,它将任何+ve或-ve long编码为 正确排序的字符串。我在这里发布了这个类:

执行字符串范围搜索应该相当直接地从 那里如果你有任何问题,请告诉我


我知道这是针对hibernate.search的,而不是针对NHibernate.search的,但是您的列上是否有一个[NumericField]可以指定?(与其他类似;-)


(4.1.1.3.@NumericField)

Hi-JSuar,我知道Lucene和数值字段的问题,因为我在使用Lucene.Net之前使用了数值字段并对它们进行了排序,我的问题涉及何时使用NHibernate.Search,以及在根据分配给模型的属性编制索引时如何存储字段。谢谢你的建议链接,但是Java文档只是告诉我我在.Net实现中已经知道的内容。这是否是你想要的更多内容:
City       Country          Region          Population
New London     United States    North America   998
Nueva Londres  Paraguay         South America   971
New London     United States    North America   967
Londonderry    United Kingdom   British Islands 92133
London     Kiribati         Micronesia  921
London     United States    North America   8122
London     United Kingdom   British Islands 7869322
New London     United States    North America   7316