0

我从休眠搜索开始,并且正在努力处理List<Integer>

我创建了一个桥来将 list<Integer> 转换为字符串。由此,我可以按关键字精确匹配列表中的任何项目进行搜索,但我似乎无法使用范围查询它。

我的实体 A 具有定义为列表的属性“b”。

我想知道是否有人可以帮助我查询在定义范围内具有任何 b 元素的所有 A 实体?

例如:具有以下集合 {1,10,15} 的 A 实例应出现在“b”属性的以下查询中:

低于(20),高于(14),低于(2)

但不是像这样的搜索:

高于(16),低于(0)。

我希望我说清楚了。提前致谢!

4

1 回答 1

0

将您的网桥更改为多次存储相同的字段,每次都具有整数列表的值 a。因此,假设您的字段名为 myInt,您将存储 myInt = 1、myInt = 10 和 myInt = 15,示例代码:

public class MyBridge implements FieldBridge {
    public void set(String name, Object value, Document document, LuceneOptions luceneOptions) {
        if (value instanceof List){
            for(Object myInt:(List)value){
                Field myIntField = new Field(name, myInt.toString(), luceneOptions.getStore(), luceneOptions.getIndex(), luceneOptions.getTermVector());
                myIntField.setBoost(luceneOptions.getBoost());
                document.add(myIntField);
            }
        }
    }
}

或者,您可以插入一些自定义的 lucene过滤器来执行此操作,但过滤器有点复杂。

于 2013-08-20T00:14:37.000 回答