Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sqlite/3.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搜索如何正确搜索UUID_Java_Hibernate_Lucene_Hibernate Search - Fatal编程技术网

Java Hibernate搜索如何正确搜索UUID

Java Hibernate搜索如何正确搜索UUID,java,hibernate,lucene,hibernate-search,Java,Hibernate,Lucene,Hibernate Search,通过使用PatternTokenizerFactory,例如024bb09c-86b4-4d73-8483-bf7839e407d8,我已将UUID作为一个完整的单词正确地索引 但在搜索时,使用此完整字符串的查询将返回一个错误,即 The query string '024bb09c-86b4-4d73-8483-bf7839e407d8' applied on field 'id' has no meaningfull tokens to be matched. Validate the qu

通过使用
PatternTokenizerFactory
,例如
024bb09c-86b4-4d73-8483-bf7839e407d8
,我已将UUID作为一个完整的单词正确地索引

但在搜索时,使用此完整字符串的查询将返回一个错误,即

The query string '024bb09c-86b4-4d73-8483-bf7839e407d8' applied on field 'id' has no meaningfull tokens to be matched. Validate the query input against the Analyzer applied on this field.
这是否意味着我需要在准备查询时设置特定的analyzer

报告此错误的代码如下所示:

lucene = builder.keyword()
                    .onFields("id", "status", "submitter")
                    .matching(keyword)
                    .createQuery();
编辑:

这是用于索引的分析器,我们的原始id是
组/UUID
的形式,因此我使用PatternTokenizer去除前缀

@AnalyzerDef(
            name = "idanalyzer",
            tokenizer = @TokenizerDef(
                    factory = PatternTokenizerFactory.class,
                    params = {
                            @Parameter(name = "pattern", value = ".*/(.*)"),
                            @Parameter(name = "group", value = "1")
                    }
            ),
            filters = {
                    @TokenFilterDef(factory = LowerCaseFilterFactory.class),
            }
    )
这是实体中的代码

@Id
@DocumentId
@Analyzer(definition = "idanalyzer")
private String id;

我终于想出了一个解决方案,那就是显式地指定一个
KeywordAnalyzer
用于ID查询。查找起来有点棘手,因为最初我使用Hibernate搜索DSL代码来构建查询,但要使用专用的分析器,我只能找到带有Lucene解析器的代码

这里有一个片段

            QueryParser parser = new QueryParser(Version.LUCENE_31, "instanceId", new KeywordAnalyzer());
            try {
                Query lucene = parser.parse(keyword);
            }

我只是将此查询添加到通过Hibernate Search DSL构建的其他查询中。

您看过这篇文章吗?请同时分享实体映射,至少分享id是如何被索引的。听起来问题可能是,一旦分析器完成了查询,查询就什么也没有了。你的分析仪是什么样子的?