Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/hibernate/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/reactjs/25.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java Hibernate搜索突出显示未分析的字段_Java_Hibernate_Lucene_Hibernate Search - Fatal编程技术网

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

Java Hibernate搜索突出显示未分析的字段,java,hibernate,lucene,hibernate-search,Java,Hibernate,Lucene,Hibernate Search,如果与搜索查询匹配,我想突出显示整个未分析字段。 索引实体如下所示: @Entity @Indexed @AnalyzerDef( name = "documentAnalyzer", tokenizer = @TokenizerDef(factory = StandardTokenizerFactory.class), filters = { @TokenFilterDef(factory = ASCIIFoldi

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

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

}
假设我有一个
文档
带有
notanalyzed字段:“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);
}
字符串高亮文本(查询查询、分析器、字符串字段名、字符串文本){
QueryScorer QueryScorer=新的QueryScorer(查询);
SimpleHTMLFormatter格式化程序=新的SimpleHTMLFormatter(“,”);
Highlighter Highlighter=新的Highlighter(格式化程序、查询取样器);
返回highlighter.getBestFragment(分析器、字段名、文本);
}
因此,我得到了以下代码片段:
“a-bbb-ccc”

这似乎是合理的,因为分析器将
符号作为停止词,将
-
作为分隔符,并且不突出显示它们。但我不知道如何在突出显示此字段时避免使用analyzer。
Highlighter
类中有一些方法需要
TokenStream
而不是
Analyzer
,但我不确定如何使用它们

我想要实现的结果是整个突出显示的字段:
“A-bbb-ccc”


有没有办法通过hibernate搜索实现这一点?

您的分析器来自哪里

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

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

如果不起作用,请尝试使用
KeywordAnalyzer
highlightText(查询,new KeywordAnalyzer(),字段名,文本)

您的分析仪来自哪里

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

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

如果不起作用,请尝试使用
KeywordAnalyzer
highlightText(查询,new KeywordAnalyzer(),字段名,文本)

我已经用我使用的自定义分析器的定义更新了这个问题。它的主要目标是有一个自定义的停止词列表。它用于突出显示过程。在这种情况下,关键字分析器对我不起作用。@IlyaZinkovich你说你不想使用分析器,你想突出显示整个文本,现在你说你想使用自定义stopwords,这意味着分析。这似乎有点矛盾?您使用KeywordAnalyzer得到了什么结果?这个结果到底有什么问题?需要突出显示的字段没有被分析,但分析器仍然存在,因为它用于所有其他字段。我尝试只在突出显示阶段使用KeywordAnalyzer,但它没有突出显示任何内容。好的,我不知道您在做什么,但您可能正在向方法(查询、文本等)传递错误的参数。我使用
关键字分析器分别尝试了您的代码,它按预期工作:。请告诉我你说“没用”的确切意思,否则我帮不了你。@Yoann,非常感谢你的帮助。问题是我使用了不同的分析器来索引和突出显示。我还用PatternTokenizer修补了我的自定义分析器,在索引中添加了x-xxx-xxxx格式的完整字符串。我用我使用的自定义分析器的定义更新了这个问题。它的主要目标是有一个自定义的停止词列表。它用于突出显示过程。在这种情况下,关键字分析器对我不起作用。@IlyaZinkovich你说你不想使用分析器,你想突出显示整个文本,现在你说你想使用自定义stopwords,这意味着分析。这似乎有点矛盾?您使用KeywordAnalyzer得到了什么结果?这个结果到底有什么问题?需要突出显示的字段没有被分析,但分析器仍然存在,因为它用于所有其他字段。我尝试只在突出显示阶段使用KeywordAnalyzer,但它没有突出显示任何内容。好的,我不知道您在做什么,但您可能正在向方法(查询、文本等)传递错误的参数。我使用
关键字分析器分别尝试了您的代码,它按预期工作:。请告诉我你说“没用”的确切意思,否则我帮不了你。@Yoann,非常感谢你的帮助。问题是我使用了不同的分析器来索引和突出显示。此外,我还使用PatternTokenizer修补了我的自定义分析器,在索引中添加了x-xxx-xxxx格式的完整字符串。