首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >通过id列表限制/过滤lucene搜索(IN运算符)

通过id列表限制/过滤lucene搜索(IN运算符)
EN

Stack Overflow用户
提问于 2016-06-01 23:57:06
回答 1查看 338关注 0票数 0

我想搜索邮件,例如根据邮件的标题和主题。但我有一个ID列表,lucene可以在里面搜索。

我只想添加一个对id的限制..看起来是个简单的任务,但是找不到解决方案...

所以基本上:(搜索查询)和(id IN (id列表))。

据我所知,lucene中没有IN-operator。

我尝试过组合BooleanJunctions,但到目前为止都没有成功。

我尝试过实现一个过滤器,但这需要一个DocIdSet/DocIdSetIterator,这非常奇怪。

它是用Java实现的,lucene的版本是3.6.2。

我尝试过的东西:

代码语言:javascript
复制
    final FullTextSession fullTextSession = Search.getFullTextSession(getSession());
    final QueryBuilder queryBuilder = fullTextSession.getSearchFactory().buildQueryBuilder().forEntity(Message.class).get();
    final BooleanJunction<?> booleanJunction = queryBuilder.bool();

    final String[] searchTerms = StringUtils.split(criteria, "\\W+");

    for (final String term : searchTerms) {
        if (StringUtils.length(term) > 2) {
            BooleanJunction<?> booleanJunctionIds = queryBuilder.bool();
            for (Long id : messageIds) {
                booleanJunctionIds.must(queryBuilder.keyword().onField("id").matching(id).createQuery());
            }
            BooleanJunction<?> booleanJunctionSearch = queryBuilder.bool();
            booleanJunctionSearch.should(queryBuilder.keyword().onFields("subject").matching(criteria).createQuery());
            /**...**/

            booleanJunction.must(booleanJunctionIds.createQuery()).must(booleanJunctionSearch.createQuery()).createQuery();
        }
    }

    final FullTextQuery fullTextQuery = fullTextSession.createFullTextQuery(booleanJunction.createQuery(), Message.class);
EN

回答 1

Stack Overflow用户

发布于 2016-06-25 00:45:48

使用正确的嵌套必须和应该元素组合创建BooleanQuery的一般方法是正确的:这应该是可行的。

您可能在"id“术语的编码方式上遇到了一些问题,或者在”subject“方面也遇到了类似的问题:您要求BooleanQuery的这些子句使用精确的关键字匹配,并且自己对输入条件进行拆分。

这有时是可取的,但容易出错,因为编码需要完全相同,包括每个关键字的大小写:您可能希望确保各个子句(如果BooleanQuery确实与您期望的元素匹配)。

我建议在合并各种Lucene查询实例之前引入对单个元素的测试,这样您就可以验证任何文本处理都是匹配的,然后才能将它们与布尔运算符组合起来。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/37573545

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档