标签: hibernate-search

如何将@FieldBridge 实现到@EmbeddedId 字段

当存在@EmbeddedId 字段时,应实现自定义字段桥。有一个关于它的功能打开https://hibernate.atlassian.net/browse/HSEARCH-1879。但它还没有准备好。

在这种情况下,正确实现的接口是TwoWayFieldBridge

下面是我对具有 5 个字段的复合 ID 的实现。

public class ChavePrimariaAcompanhamentoBridge implements TwoWayFieldBridge {

    @Override
    public void set(String name, Object value, Document document, LuceneOptions luceneOptions) {

        AcompanhamentoPK chavePrimaria = (AcompanhamentoPK) value;

        Integer ano = chavePrimaria.getAno();
        Integer mes = chavePrimaria.getMes();
        Long codigoCredenciada = chavePrimaria.getCredenciada().getCodigo();
        Long codigoPosto = chavePrimaria.getPostoAtendimento().getCodigo();
        Integer numeroSequencial = chavePrimaria.getNumeroSequencial();

        luceneOptions.addNumericFieldToDocument("mes", mes, document);
        luceneOptions.addNumericFieldToDocument("ano", ano, document);
        luceneOptions.addNumericFieldToDocument("credenciada.codigo", codigoCredenciada, document);
        luceneOptions.addNumericFieldToDocument("postoAtendimento.codigo", codigoPosto, document);
        luceneOptions.addNumericFieldToDocument("numeroSequencial", numeroSequencial, document);
    }

    @Override
    public Object get(String name, Document document) {

        AcompanhamentoPK …
Run Code Online (Sandbox Code Playgroud)

hibernate-search

4
推荐指数
1
解决办法
947
查看次数

创建初始索引时 Hibernate Search 失败

我正在尝试将 Hibernate Search 集成到 Spring Boot 2 应用程序中。我已经按照其网站上的兼容性列表尝试了不同的版本,但当应用程序启动和“fullTextEntityManager.createIndexer().startAndWait();”时我总是收到此错误 被执行:

线程“main”中的异常 java.lang.IllegalArgumentException:HSEARCH000349:某些指定的实体类型(“class java.lang.Object”)未建立索引,它们的任何子类也未建立索引。

经过三天的谷歌搜索和尝试了很多事情之后,我不知道我还能做什么。


pom.xml

<parent>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-parent</artifactId>
    <version>2.1.7.RELEASE</version>
    <relativePath/> <!-- lookup parent from repository -->
</parent>

<properties>
    ...
</properties>

<dependencies>
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-data-jpa</artifactId>
    </dependency>
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-security</artifactId>
    </dependency>
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-web</artifactId>
    </dependency>

    <dependency>
        <groupId>org.projectlombok</groupId>
        <artifactId>lombok</artifactId>
        <optional>true</optional>
    </dependency>

    <dependency>
        <groupId>mysql</groupId>
        <artifactId>mysql-connector-java</artifactId>
        <scope>runtime</scope>
    </dependency>
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-test</artifactId>
        <scope>test</scope>
    </dependency>
    <dependency>
        <groupId>com.opencsv</groupId>
        <artifactId>opencsv</artifactId>
        <version>${opencsv.version}</version>
    </dependency>
    <dependency>
        <groupId>org.mapstruct</groupId>
        <artifactId>mapstruct-jdk8</artifactId>
        <version>${org.mapstruct.version}</version>
    </dependency>
    <dependency>
        <groupId>org.mapstruct</groupId>
        <artifactId>mapstruct-processor</artifactId>
        <version>${org.mapstruct.version}</version>
    </dependency>

    <dependency>
        <groupId>org.hibernate</groupId>
        <artifactId>hibernate-search-orm</artifactId>
        <version>5.10.6.Final</version>
    </dependency>

    <dependency>
        <groupId>org.apache.lucene</groupId>
        <artifactId>lucene-spatial</artifactId> …
Run Code Online (Sandbox Code Playgroud)

java hibernate-search spring-data-jpa spring-boot

4
推荐指数
1
解决办法
1398
查看次数

Lucene BooleanQuery

如何在Lucene Search中使用带有StandardAnalyzer的booleanQuery?

lucene search hibernate analyzer hibernate-search

3
推荐指数
1
解决办法
2307
查看次数

对多个搜索字段使用通用查询约定

想象一下,我正在建立一个标签搜索.我的主索引类型称为Post,它有一个Hashtag项列表,标记为IndexedEmbedded.另外,每个帖子都有一个Comment对象列表,每个对象都包含一个Hashtag对象列表.

在搜索方面,我使用MultiFieldQueryParser,我传递了一长串可能的搜索字段,包括一些嵌套字段,如:

hashTags.valuecoments.hashTags.value

现在,有趣的事情发生在我想搜索某些东西时,比如#architecture.我找出了主题标签的位置,所以最简单的逻辑做法是将#architecture类型的查询转换为类型之一hashTags.value:architecture or comments.hashTags.value:architecture尽管可能,这是非常不灵活的.如果我想出另一个包含主题标签的字段怎么办?我也必须把它包括在内.

有没有一般的方法来做到这一点?

PS请记住,我正在搜索的根类型是Post,因为这是我想要实现的结果

java lucene hibernate hibernate-search hashtag

3
推荐指数
1
解决办法
646
查看次数

Spring Boot,Hibernate搜索属性

如何在使用Spring Boot时提供Hibernate Search参数?

...
spring.datasource.driverClassName=org.postgresql.Driver

hibernate.search.jmx_enabled=true
hibernate.search.default.directory_provider=filesystem
hibernate.search.generate_statistics=true
hibernate.search.lucene_version=LUCENE_CURRENT
hibernate.search.default.indexBase=/mypath-to-index
Run Code Online (Sandbox Code Playgroud)

它并不关心我提供的内容.始终应用默认设置.

我认为下面的代码没有任何东西来处理与Hibernate Search相关的属性.这可能是问题吗?

https://github.com/spring-projects/spring-boot/blob/master/spring-boot-autoconfigure/src/main/java/org/springframework/boot/autoconfigure/orm/jpa/JpaProperties.java

spring hibernate-search spring-boot

3
推荐指数
1
解决办法
3495
查看次数

Hibernate全文搜索分页

我正在使用Hibernate全文搜索.我目前正在使用:

<dependency>
    <groupId>org.hibernate</groupId>
    <artifactId>hibernate-search</artifactId>
    <version>4.5.1.Final</version>
</dependency>
Run Code Online (Sandbox Code Playgroud)

我可以搜索好了.我的问题是:我如何对结果进行分页?有什么方法我可以先得到50个结果,然后在接下来的50个结果请求下一页时拨打电话吗?

我想到的一种方法是简单地获取最大ID,然后从Max + 1位置开始下一次搜索,假设ID是以自动增量顺序生成的.但我认为必须有更优雅的方法.

java pagination hibernate java-ee hibernate-search

3
推荐指数
1
解决办法
2468
查看次数

Hibernate Search 5.0数字Lucene查询HSEARCH000233问题

问题:我们如何使用包含数字和非数字字段的原始lucene查询字符串提供hibernate搜索?

背景:我们最近升级到HibernateSearch 5.0,由于HibernateSearch Query Parser(pre-lucene)发生了更改,我们的许多查询现在都失败了,并出现以下错误:

The specified query contains a string based sub query which targets the numeric encoded field(s)

在大多数情况下,MultiFieldQueryParser由于我们运行的查询的复杂性,我们使用lucene的文本语法和a 将查询传递给HibernateSearch.直到HibernateSearch 5.0,这些都运行良好.在升级中,我们遇到了从HibernateSearch抛出的异常,这些异常阻止我们的应用程序运行以前的查询.我们不明白为什么抛出异常或者是向前推进的最佳方式.

在试图追踪问题时,我试图简化哪些有效,哪些无法以最原始的形式进行.(这是由HibernateSearch的QueryValidationTest构建的).

例子:

给定以下Entity类:

@Entity
@Indexed
public static class B {
    @Id
    @GeneratedValue
    private long id;

    @Field
    private long value;

    @Field
    private String text;
}
Run Code Online (Sandbox Code Playgroud)

测试1(我们如何为hibernate搜索编写查询:FAILURE):

        QueryParser parser = new MultiFieldQueryParser(new String[]{"id","value","num"},new StandardAnalyzer());
        Query query = parser.parse("+(value:1 text:test)");
        FullTextQuery fullTextQuery = fullTextSession.createFullTextQuery( query, B.class );
        fullTextQuery.list();
Run Code Online (Sandbox Code Playgroud)

结果是:

org.hibernate.search.exception.SearchException: HSEARCH000233: The specified query …
Run Code Online (Sandbox Code Playgroud)

hibernate-search

3
推荐指数
1
解决办法
2739
查看次数

使用infinispan进行Hibernate搜索,如何将索引存储在持久性缓存存储中

Hibernate在内存中搜索默认的infinispan配置存储索引,一旦关闭应用程序,就必须重新索引所有内容.

我读了infinispan文档,有一种方法可以将索引存储到infinispan文件存储中.在谷歌周围搜索后,我仍然不知道如何配置它.

hibernate-search infinispan

3
推荐指数
1
解决办法
1385
查看次数

版本5.7.1.HinalnateSearchFinal抱怨ElasticSearch黄色索引状态

我尝试将HibernateSearch从版本升级5.7.0.Alpha1到版本5.7.1.Final,但这是不可能的.运行使用该Final版本编译的应用程序时出现以下错误:

Exception in thread "main" org.hibernate.search.exception.SearchException:
HSEARCH400024: Timed out while waiting for for index
'com.example.app.model.journal' to reach status 'green';
status was still 'yellow' after 10000ms.
Run Code Online (Sandbox Code Playgroud)

索引状态yellow在我的设置中是典型的(我认为).我的整个群集状态是yellow,因为它是ElasticSearch的单机部署(用于测试目的).所以我想阻止HibernateSearch等待green状态并强制它接受它yellow(之前的版本没有这样做).我可以设置一些设置,例如hibernate.cfg.xml吗?

我在开发者论坛上发现了这个问题,但是没有人提到设置名称.

java hibernate-search elasticsearch

3
推荐指数
1
解决办法
244
查看次数

使用Elasticsearch的RestClient时如何解决“对等连接重置”

我们正在针对Elasticsearch 5.6.6服务器使用Hibernate Search 5.10.3.Final。

直接发布FullTextQueries时,我们的应用程序与ES之间的连接似乎很牢固,也许b / c HibernateSearch具有一些内置的重试方法,但是我不确定,但是,在我们的应用程序中,我们使用Elasticsearch的RestClient发出直接调用。 _analyze,这是connection reset by peer我们的防火墙在30分钟后关闭空闲连接时得到的IOException。

java.io.IOException: Connection reset by peer
    at sun.nio.ch.FileDispatcherImpl.read0(Native Method) ~[?:1.8.0_131]
    at sun.nio.ch.SocketDispatcher.read(SocketDispatcher.java:39) ~[?:1.8.0_131]
    at sun.nio.ch.IOUtil.readIntoNativeBuffer(IOUtil.java:223) ~[?:1.8.0_131]
    at sun.nio.ch.IOUtil.read(IOUtil.java:197) ~[?:1.8.0_131]
    at sun.nio.ch.SocketChannelImpl.read(SocketChannelImpl.java:380) ~[?:1.8.0_131]
    at org.apache.http.impl.nio.reactor.SessionInputBufferImpl.fill(SessionInputBufferImpl.java:204) ~[httpcore-nio-4.4.5.jar:4.4.5]
    at org.apache.http.impl.nio.codecs.AbstractMessageParser.fillBuffer(AbstractMessageParser.java:136) ~[httpcore-nio-4.4.5.jar:4.4.5]
    at org.apache.http.impl.nio.DefaultNHttpClientConnection.consumeInput(DefaultNHttpClientConnection.java:241) ~[httpcore-nio-4.4.5.jar:4.4.5]
    at org.apache.http.impl.nio.client.InternalIODispatch.onInputReady(InternalIODispatch.java:81) ~[httpasyncclient-4.1.2.jar:4.1.2]
    at org.apache.http.impl.nio.client.InternalIODispatch.onInputReady(InternalIODispatch.java:39) ~[httpasyncclient-4.1.2.jar:4.1.2]
    at org.apache.http.impl.nio.reactor.AbstractIODispatch.inputReady(AbstractIODispatch.java:114) ~[httpcore-nio-4.4.5.jar:4.4.5]
    at org.apache.http.impl.nio.reactor.BaseIOReactor.readable(BaseIOReactor.java:162) ~[httpcore-nio-4.4.5.jar:4.4.5]
    at org.apache.http.impl.nio.reactor.AbstractIOReactor.processEvent(AbstractIOReactor.java:337) ~[httpcore-nio-4.4.5.jar:4.4.5]
    at org.apache.http.impl.nio.reactor.AbstractIOReactor.processEvents(AbstractIOReactor.java:315) ~[httpcore-nio-4.4.5.jar:4.4.5]
    at org.apache.http.impl.nio.reactor.AbstractIOReactor.execute(AbstractIOReactor.java:276) ~[httpcore-nio-4.4.5.jar:4.4.5]
    at org.apache.http.impl.nio.reactor.BaseIOReactor.execute(BaseIOReactor.java:104) ~[httpcore-nio-4.4.5.jar:4.4.5]
    at org.apache.http.impl.nio.reactor.AbstractMultiworkerIOReactor$Worker.run(AbstractMultiworkerIOReactor.java:588) ~[httpcore-nio-4.4.5.jar:4.4.5]
    at java.lang.Thread.run(Thread.java:748) ~[?:1.8.0_131]
Run Code Online (Sandbox Code Playgroud)

为了完整起见,这是我们大多数的RestClient代码:

SearchFactory searchFactory = fts.getSearchFactory();
IndexFamily …
Run Code Online (Sandbox Code Playgroud)

java hibernate-search elasticsearch

3
推荐指数
1
解决办法
2866
查看次数