使用多个关键字进行Hibernate Search的索引搜索

匈奴人

当我尝试仅使用一个关键字进行搜索时,使用Hibernate Search 4.5.0.Final的应用程序运行正常。但是,如果我尝试使用两个关键字,那么Hibernate Search不会使用第二个关键字,HS只会考虑第一个。

例如,如果我尝试搜索“ James”,则搜索工作正常,并且应用程序返回索引中包含的所有“ James”。但是,如果我尝试搜索“ James Hetfield”,结果将再次是所有“ James”,而不是名称为“ James Hetfield”的唯一结果。我需要将“ James Hetfield”视为“ James AND Hetfield”

编辑:我犯了一个错误。搜索使用两个关键字,但使用“ OR”而不是“ AND”

我的代码:

public List<Person> search(String keywords) throws DAOException {
    try {
        FullTextEntityManager fullTextEm = Search.getFullTextEntityManager(this.entityManager);
        QueryBuilder qb = fullTextEm.getSearchFactory().buildQueryBuilder().forEntity(Person.class).get();
        Query query = qb.keyword().onFields("name", "email", "username", "phone").matching(keywords).createQuery();
        FullTextQuery fullTextQuery = fullTextEm.createFullTextQuery(query);
        fullTextQuery.setProjection("name", "email", "username", "phone");
        Sort sortField = new Sort(new SortField("name_order", SortField.STRING));
        fullTextQuery.setSort(sortField);
        return fullTextQuery.getResultList();
    }
    catch (Exception e) {
        logger.error("Error searching index: " + keywords, e);
        throw new DAOException(e);
    }
}
匈奴人

找到了解决方案。我已经拆分了String并使用了BooleanQuery。感谢@thomas这是我的代码:

分裂:

String[] arrKeywords = keywords.split(" ");
this.search(Arrays.asList(arrKeywords));

然后,搜索:

public List<Person> search(String keywordsList) throws DAOException {
    try {
        FullTextEntityManager fullTextEm = Search.getFullTextEntityManager(this.entityManager);
        QueryBuilder qb = fullTextEm.getSearchFactory().buildQueryBuilder().forEntity(Person.class).get();

        List<Query> queryList = new LinkedList<Query>();
        Query query = null;

        for (String keyword : keywordsList) {
            query = qb.keyword().onFields("name", "email", "username", "phone").matching(keyword).createQuery();
            queryList.add(query);
        }

        BooleanQuery finalQuery = new BooleanQuery();
        for (Query q : queryList) {
            finalQuery.add(q, Occur.MUST);
        }

        FullTextQuery fullTextQuery = fullTextEm.createFullTextQuery(query);
        fullTextQuery.setProjection("name", "email", "username", "phone");
        Sort sortField = new Sort(new SortField("name_order", SortField.STRING));
        fullTextQuery.setSort(sortField);
        return fullTextQuery.getResultList();
    }
    catch (Exception e) {
        logger.error("Error searching index: " + keywords, e);
        throw new DAOException(e);
    }
}

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

如何使用Mat Table按空格分隔的多个关键字进行搜索

如何在循环中发送多个关键字以使用硒进行搜索?

对Elasticsearch索引上的“关键字”字段进行汇总搜索

搜索多个关键字和相应的索引

使用 SQL 进行多关键字搜索

在Cakephp中使用foreach搜索多个关键字

使用grep在不同的行上搜索多个关键字

有多个关键字时使用excel搜索功能

如何使用相同的关键字逐行索引多个文本?

使用Apache Solr进行索引编制时出错:非multiValued字段关键字遇到多个值

收听多个关键字短语搜索

在文本中搜索多个关键字

MySQL搜索多个关键字

如何进行基因剔除搜索多个关键字以及实时搜索

如何使用Hibernate-Search索引和搜索ENUM类型

使用EntityFramework搜索关键字

使用关键字搜索HTML TD

使用FOSElasticaBundle多次搜索关键字

如何对搜索引擎关键字进行聚类?

弹性搜索多个字段中的多个关键字

如何使用mysqli Prepared语句从搜索字段中使用多个关键字执行LIKE查询

使用 python pandas 在两个 DataFrame 之间进行关键字搜索

使用其他关键字对二叉搜索树进行排序?

在Vim中使用先前定义的关键字进行搜索

使用完整和部分字符串进行 SQL 关键字搜索

如何对在 Django 中使用关键字搜索后显示的对象结果进行排序

使用自动填充数组公式进行关键字搜索

使用Google App Engine或Lucene通过关键字映射进行搜索

在xquery中使用标记化和匹配进行多关键字搜索