当前位置: 首页 > 知识库问答 >
问题:

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

漆雕昊天
2023-03-14

如果所有未分析的字段与搜索查询匹配,我希望突出显示它们。
索引实体如下所示:

@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;   

}

假设我有一个文档,它带有notanalyzedfield:“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-BBB-CCC.
这似乎是合理的,因为分析器将符号视为停止字,而将-视为分隔符,并且不突出显示它们。但是我不知道如何在突出显示这个字段的同时避免使用analyzer。highlighter类中有一些方法需要tokenstream而不是analyzer,但我不知道如何使用它们。

我想实现的一个结果是整个突出显示的字段:a-bbb-ccc
有没有办法用hibernate-search实现这一点?

共有1个答案

秦宏硕
2023-03-14

你的分析仪是从哪里来的?

您可能希望从Hibernate搜索中获得它:

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

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

 类似资料:
  • 问题内容: 我想使用jQuery / Java脚本搜索并突出显示文本。 示例HTML 1: 当我搜索字符串“ Good Morning”时,div1和div3中的内容都应突出显示。即。输出html应该是 我使用了插件https://raw.github.com/bartaz/sandbox.js/master/jquery.highlight.js将搜索到的内容包含在span中。但是只有div3高

  • 问题内容: 我正在使用此代码突出显示搜索关键字: 但是,这仅突出显示一个关键字。如果用户输入多个关键字,则会缩小搜索范围,但不会突出显示任何单词。如何突出显示多个单词? 问题答案: 正则表达式是必经之路! 要以不区分大小写的方式进行匹配,请在正则表达式中添加“ i” 注意:对于像“ä”这样的非英语字母,结果可能会因地区而异。

  • 问题内容: 如何突出显示使用php的mysql查询的搜索结果? 这是我的 [修改] 代码: 问题答案: 您可以使用preg_replace();,当它在文本中找到匹配项时,您可以在匹配词周围放置一个带有突出显示类别的div。然后,您可以向突出显示类添加背景颜色和边框,以使其突出显示 preg_replace期望3个参数; 第一个是您要寻找的 第二个是应该更改为 他应从中搜索并替换的文本字符串 例如

  • 我有一个反应原生应用程序,我有一个搜索栏和一个FlatList。我的搜索逻辑如下 搜索栏: FlatList: 渲染项: 项目组成部分: 我想要一个搜索过滤器高亮显示,如下所示,当我开始在搜索栏中键入文本时,平面列表中的文本必须高亮显示。 我如何实现这个??反应本族语突出词?有什么功能吗?请帮忙

  • 搜索“adida shi”,应该会得到两个商品,一个是名称为“adidas shirts”,另一个是“adidas red shirts” 预期突出显示: 实际突出显示: 有什么想法让它工作吗?