Helpers - компьютеры, интернет, программирование

Ошибка Hibernate Search при создании начальных индексов

Я пытаюсь интегрировать Hibernate Search в приложение Spring Boot 2. Я пробовал разные версии, следуя списку совместимости на их сайте, но всегда получаю эту ошибку при запуске приложения и "fullTextEntityManager.createIndexer().startAndWait();" выполняется:

Исключение в потоке "main" java.lang.IllegalArgumentException: HSEARCH000349: некоторые из указанных типов сущностей ("класс java.lang.Object") не индексируются, равно как и их подклассы.

После 3 дней гугления и перепробования многих вещей я понятия не имею, что еще я могу сделать.


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>
        <version>5.5.5</version>
    </dependency>

</dependencies>

Поскольку конфигурация источника данных обрабатывается весенней загрузкой, у меня нет файла persistence.xml, поэтому я поместил свойства Hibernate Search в application.properties. На самом деле я поместил эти свойства также в hibernate.properties, пытаясь заставить это работать.

application.properties

...
spring.datasource.username=*******
spring.datasource.password=*******
spring.jpa.database=MYSQL
spring.jpa.database-platform=org.hibernate.dialect.MySQLDialect
spring.jpa.hibernate.ddl-auto=none
spring.jpa.show-sql=false
spring.jpa.hibernate.naming.physicalstrategy=org.hibernate.boot.model.naming.PhysicalNamingStrategyStandardImpl
spring.jpa.hibernate.search.default.directory_provider=filesystem
spring.jpa.hibernate.search.default.indexBase=/lucene/indexes

hibernate.properties

hibernate.search.default.directory_provider=filesystem
hibernate.search.default.indexBase=/lucene/indexes

Мой объект Ресторан для индексации:

@Data
@Builder
@NoArgsConstructor
@AllArgsConstructor
@EqualsAndHashCode
@Indexed
@Spatial
@Entity
@Table(name = "restaurant")
public class Restaurant {

    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private Integer id;

    @Field(index = Index.YES, analyze = Analyze.NO, store = Store.YES)
    private String name;
    private String address;
    @Latitude
    private Double latitude;
    @Longitude
    private Double longitude;
}

Я запускаю Hibernate Search сразу после запуска весенней загрузки

@SpringBootApplication
public class PlacesApplication {

    public static void main(String[] args) {
        ConfigurableApplicationContext context = 
        SpringApplication.run(PlacesApplication.class, args);

        context.getBean(HibernateSearchService.class)
        .initializeHibernateSearch();
}

А моя служба поиска Hibernate выглядит так:

@AllArgsConstructor
@Service
@Slf4j
public class HibernateSearchService {

    private EntityManager entityManager;
    @Transactional
    public void initializeHibernateSearch() {

        try {
            FullTextEntityManager fullTextEntityManager = Search.getFullTextEntityManager(entityManager);
            fullTextEntityManager.createIndexer().startAndWait();
        } catch (InterruptedException e) {
            e.printStackTrace();
        }
    }
}

Ответы:


1

Я нашел проблему, очень очень глупая проблема....

Моя IDE только что импортировала неправильную индексированную аннотацию. Он установил import org.springframework.stereotype.Indexed; вместо импорта org.hibernate.search.annotations.Indexed;

07.09.2019
  • Вы спасли меня от часов и часов поисков 29.03.2021
  • Новые материалы

    Интуитивное понимание тензоров в машинном обучении
    Тензор является важной концепцией во многих научных областях, таких как математика, физика, обработка сигналов и компьютерное зрение, и это лишь некоторые из них. В математике тензор — это..

    Использование машинного обучения для диагностики болезни Альцгеймера, часть 4
    Маркеры семантической согласованности для ранней диагностики болезни Альцгеймера (arXiv) Автор: Давиде Колла , Маттео Дельсанто , Марко Агосто , Бенедетто Витиелло , Даниэле Паоло Радичони..

    Почему объяснимость так важна прямо сейчас?
    По мере того, как системы искусственного интеллекта и инструменты на основе машинного обучения распространяются в нашей повседневной жизни, как практики, так и критики все чаще заявляют о..

    Анимированный математический анализ
    Использование Manim для создания математических анимированных визуализаций Визуализация данных помогает понять скрытые закономерности в данных, которые невозможно визуализировать..

    Создание простого слайдера изображений с помощью JavaScript
    Узнайте, как создать базовый слайдер изображений с помощью HTML, CSS и JavaScript. Введение В этом уроке мы создадим удобный слайдер изображений, используя JavaScript, HTML и CSS. Ползунок..

    Создание базы данных с помощью супергероя «Python»
    В этом посте мы узнаем, как создать «базу данных SQLite с помощью модуля python sqlite3, создав простую функцию входа и регистрации. Готовы ли вы к этому путешествию? Если да , давайте приступим..

    ИИ для чайников: руководство для начинающих по пониманию будущего технологий
    Вы чувствуете, что остались позади в мире ИИ? Не волнуйтесь, вы не одиноки! Со всей этой шумихой вокруг искусственного интеллекта может быть трудно понять, с чего начать. Но не позволяйте сленгу..