gpt4 book ai didi

java - Hibernate 搜索突出显示未分析的字段

转载 作者:行者123 更新时间:2023-12-02 02:26:50 25 4
gpt4 key购买 nike

如果与搜索查询匹配,我想突出显示整个未分析的字段。
索引实体如下所示:

@Entity
@Indexed
@AnalyzerDef(
name = "documentAnalyzer",
tokenizer = @TokenizerDef(factory = StandardTokenizerFactory.class),
filters = {
@TokenFilterDef(factory = ASCIIFoldingFilterFactory.class),
@TokenFilterDef(factory = LowerCaseFilterFactory.class),
@TokenFilterDef(
factory = StopFilterFactory.class,
params = {
@Parameter(name = "words", value = "stoplist.properties"),
@Parameter(name = "ignoreCase", value = "true")
}
)
}
)
public class Document {

...

@Field(analyze = Analyze.NO)
private String notAnalyzedField; // has "x-xxx-xxx" format

@Field(analyze = Analyze.YES)
private String analyzedField;

}

假设我有一个DocumentnotAnalyzedField: "a-bbb-ccc" ,然后我使用相同的值运行搜索查询并使用以下代码突出显示搜索结果:

String highlightText(Query query, Analyzer analyzer, String fieldName, String text) {
QueryScorer queryScorer = new QueryScorer(query);
SimpleHTMLFormatter formatter = new SimpleHTMLFormatter("<span>", "</span>");
Highlighter highlighter = new Highlighter(formatter, queryScorer);
return highlighter.getBestFragment(analyzer, fieldName, text);
}

结果我得到以下代码片段:"a-<span>bbb</span>-<span>ccc</span>" .
这似乎是合理的,因为分析器处理 a符号作为停用词和 -作为分隔符并且不突出显示它们。但我不知道如何在突出显示该字段的同时避免使用分析器。 Highlighter中有几个方法需要 TokenStream 的类(class)而不是Analyzer但我不知道如何使用它们。

我想要实现的结果是整个突出显示的字段:"<span>a-bbb-ccc</span>"
有没有办法通过 hibernate-search 来实现这一点?

最佳答案

您的分析仪来自哪里?

您可能想从 Hibernate Search 获取它:

FullTextEntityManager em = /*...*/;
Analyzer analyzer = em.getSearchFactory()
.getAnalyzer(Document.class);
highlightText(query, analyzer, fieldName, text);

如果不起作用,请尝试使用KeywordAnalyzer:highlightText(query, new KeywordAnalyzer(), fieldName, text);

关于java - Hibernate 搜索突出显示未分析的字段,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47673242/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com