带有 Lucene 荧光笔和同义词列表的 Hibernate Search 6

梅拉瓦110

我们有一个很大的同义词列表。我使用手动分析器来索引搜索字段。同义词列表使用“ SynonymGraphFilterFactory ”过滤器进行注释到目前为止一切都很好。当我在该领域进行搜索时,我得到了匹配的结果。同义词列表如下所示:汽车,车辆

如果我在搜索中输入“car”,则会显示正确的结果并突出显示“car”一词。

当我输入“车辆”这个词时,我得到了正确的结果,但没有突出显示。

我想在搜索中突出显示这两个词。“车”和“车”。这甚至可能吗?

到目前为止,我还没有找到合适的解决方案。也许有人可以在这里帮助我。

配置: Hibernate-search 6,Lucene Higlighter 8.7

代码:

要索引搜索字段,我的分析器如下所示:

context.analyzer ("myCustomAnalyzer"). custom ()
.tokenizer (StandardTokenizerFactory.class)
.tokenFilter (LowerCaseFilterFactory.class)
.tokenFilter (KeywordRepeatFilterFactory.class)
.tokenFilter (PorterStemFilterFactory.class)
.tokenFilter (TrimFilterFactory.class)
.tokenFilter (SnowballPorterFilterFactory.class) .param ("language", "German")
.tokenFilter (RemoveDuplicatesTokenFilterFactory.class)
.tokenFilter (SynonymGraphFilterFactory.class) .param ("synonyms", "synonyms / synonyms.properties")
.param ("ignoreCase", "true"). param ("expand", "true");

荧光笔方法如下所示:

private Results highlighting(final Results results, final String mySearchString) {

        final SimpleHTMLFormatter simpleHTMLFormatter = new SimpleHTMLFormatter("start", "end");
        final TermQuery query = new TermQuery(
            new Term("indexFieldName", mySearchString));
        final QueryScorer queryScorer = new QueryScorer(query, "indexFieldName");
        final Fragmenter fragmenter = new SimpleSpanFragmenter(queryScorer);
        queryScorer.setExpandMultiTermQuery(true);
        final Highlighter highlighter = new Highlighter(simpleHTMLFormatter, queryScorer);
        highlighter.setTextFragmenter(fragmenter);

        try (Analyzer analyzer = new StandardAnalyzer()) {
            for (final MyEntity my : results.getMyResults()) {
                for (final MySecondEntity sec : my.getMyDescriptions()) {

                    final String text = sec.getMyName();

                    try {
                        final TokenStream tokenStream = analyzer.tokenStream(
                            "indexFieldName", new StringReader(text));
                        final String result = highlighter.getBestFragments(
                            tokenStream, text,
                            sec.getMyName().length(), " ...");
                        if (!StringUtils.isBlank(result)) {

                            sec.setMyName(result);
                        }

                    } catch (final Exception e) {
                        LOG.warn(String.format(
                            "Failure during highlighting process for ..."...
                    }
                }
            }

        }
        return results;
    }

谢谢您的回答

罗迪埃

我不太熟悉荧光笔,但在您的代码中似乎可疑的一件事是您使用 aStandardAnalyzer来突出显示。如果要突出显示同义词,我相信您需要使用处理同义词的分析器。

尝试使用相同的分析器进行索引和突出显示。

您可以从 Hibernate Search 中检索分析器实例。请参阅文档的这一部分,或此示例:

LuceneBackend luceneBackend =
        Search.mapping( entityManager.getEntityManagerFactory() )
        .backend().unwrap( LuceneBackend.class ); 
Analyzer analyzer = luceneBackend.analyzer( "myCustomAnalyzer" ).get(); 

然后new StandardAnalyzer()在你的高亮代码中使用它只要确保你不要关闭这个分析器。

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

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

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

带有枚举字段的Hibernate Search / Lucene范围查询不返回任何结果

如何在Hibernate Search中使用Wordnet同义词?

带有DefaultTableCellrenderer和备用条带荧光笔的JXTable

Hibernate-Search 6和Elasticsearch集成

使用Hibernate Search / Lucene标记云?

将最新的Hibernate Search与Lucene 4混合

如果字符串中有“ =”,则Hibernate Search(Lucene)返回空结果

Hibernate Search直接计数,而不是使用Lucene和Elasticsearch进行常规查询

如何使用Hibernate Lucene Search进行不区分大小写的挪威字符(Æ,Ø和Å)排序?

如何将Hibernate Search(Lucene)与分页和ACL结合使用

带有文本荧光笔的jQuery过滤器

Hibernate Search 5.0数值Lucene查询HSEARCH000233问题

插入后,Hibernate Search不会重新索引lucene索引

如何在 Hibernate Lucene Search 中添加多个限制?

集合上的Hibernate Search(Lucene)过滤器

未指定hibernate.search.lucene_version:使用LUCENE_CURRENT

Hibernate envers + hibernate-search :通过 Lucene/Elasticsearhc 索引读取审计信息

Lucene通配符和单词结尾带有字母“ s”

带有短语顺序斜率和OR子句的Lucene查询

Hibernate Search 6中LocalDateTime的范围查询

Elasticsearch查找输入词和所有同义词

整个实例中所有数据库和相应同义词的列表

在Azure搜索中使用Lucene模糊搜索和同义词

在Lucene.Net语法和Amazon Cloud Search语法之间有直接比较吗

使Lucene.net荧光笔仅显示特定字段中的匹配项

带有 JPA 和 Hibernate 的复合键

Elastic Search同义词-删除操作

如何使用Hibernate Lucene Search访问实体中外键的排序字段名称?

如何在Hibernate Search / Lucene中禁用默认评分/增强功能?