Hibernate поиск вручную индексация - PullRequest
0 голосов
/ 24 мая 2018

Я новичок в Hibernate Search.Я пытаюсь интегрировать Hibernate Search для поиска адресов.Я использую Hibernate Search 5.5.6.Final.Моя таблица адресов содержит> 15 миллионов записей.Я использую ручное индексирование для создания индекса lucene для существующей таблицы адресов.Индексирование завершается, но когда я просматриваю их через Люка, в нем содержится менее 70 000 документов.Это кажется правильным?Разве номер документа не должен быть намного больше, чем количество записей?Есть ли способ, чтобы индексирование проходило через все записи?пожалуйста, помогите ...

Вот мой энты:

@Entity
@Table (name = "ADDRESSES_LOOKUP")
@AnalyzerDef(name = "customanalyzer",
        tokenizer = @TokenizerDef(factory = StandardTokenizerFactory.class),
        filters = {
                @TokenFilterDef(factory = LowerCaseFilterFactory.class),
                @TokenFilterDef(factory = SnowballPorterFilterFactory.class, params = {
                        @Parameter(name = "language", value = "English")
                })
        })
@Indexed
public class Address {

    @Id
    @GeneratedValue(strategy = GenerationType.AUTO)
    @Column (name = "ADDRESS_ID")
    private String id;

    @Column (name = "BUILDING_NAME")
    @Field(index = Index.YES, analyze = Analyze.YES, store = Store.YES)
    @Analyzer(definition = "customanalyzer")
    private String buildingName;

    @Column (name = "FLAT_NUMBER")
    @Field(index = Index.YES, analyze = Analyze.YES, store = Store.YES)
    private String flatNumber;

    @Column (name = "FLAT_TYPE")
    @Field(index = Index.YES, analyze = Analyze.YES, store = Store.YES)
    private String flatType;

    @Column (name = "LEVEL_NUMBER")
    @Field(index = Index.YES, analyze = Analyze.YES, store = Store.YES)
    private String levelNumber;

    @Column (name = "LEVEL_TYPE")
    @Field(index = Index.YES, analyze = Analyze.YES, store = Store.YES)
    private String levelType;

    @Column (name = "NUMBER_FIRST")
    @Field(index = Index.YES, analyze = Analyze.YES, store = Store.YES)
    private String numberFirst;

    @Column (name = "NUMBER_LAST")
    @Field(index = Index.YES, analyze = Analyze.YES, store = Store.YES)
    private String numberLast;

    @Column (name = "STREET_NAME")
    @Field(index = Index.YES, analyze = Analyze.YES, store = Store.YES)
    private String streetName;

    @Column (name = "STREET_TYPE_CODE")
    @Field(index = Index.YES, analyze = Analyze.YES, store = Store.YES)
    private String streetType;

    @Column (name = "LOCALITY_NAME")
    @Field(index = Index.YES, analyze = Analyze.YES, store = Store.YES)
    private String locality;

    @Column (name = "STATE_ABBREVIATION")
    @Field(index = Index.YES, analyze = Analyze.YES, store = Store.YES)
    private String state;

    @Column (name = "POSTCODE")
    @Field(index = Index.YES, analyze = Analyze.YES, store = Store.YES)
    private String postcode;

    @Column (name = "ADDRESS")
    @Field(index = Index.YES, analyze = Analyze.YES, store = Store.YES)
    @Analyzer(definition = "customanalyzer")
    private String address;

Вот код для индексации

public void initializeHibernateSearch() {
    logger.info("Start initialising hibernate search index.");
    try {
        FullTextEntityManager fullTextEntityManager = Search.getFullTextEntityManager(entityManager);
        fullTextEntityManager
                .createIndexer()
                .typesToIndexInParallel( 3 )
                .batchSizeToLoadObjects( 50 )
                .cacheMode( CacheMode.IGNORE )
                .threadsToLoadObjects( 30 )
                .idFetchSize( 150 )
                .transactionTimeout( 1800 )
                .startAndWait();

    } catch (InterruptedException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    }
    logger.info("HIBERNATE SEARCH INDEX INITIALISED.");
}

1 Ответ

0 голосов
/ 04 августа 2018

Для начала лучше всего использовать ProgressMonitor (либо SimpleIndexingProgressMonitor, либо пользовательский, который вы определяете) и перейти к нескольким доступным методам, таким как addToTotalCount, который должен сообщить вам, сколько адресов он намереваетсяиндекс.Есть также метод printStatusMessage, который должен дать вам некоторую информацию о прогрессе.

SimpleIndexingProgressMonitor progressMonitor = new SimpleIndexingProgressMonitor();
fullTextSession
                .createIndexer(Address.class)
                .typesToIndexInParallel(1)
                .batchSizeToLoadObjects(50)
                .cacheMode(CacheMode.IGNORE)
                .threadsToLoadObjects(30)
                .idFetchSize(150)
                .progressMonitor(progressMonitor)
                .startAndWait();

Есть ли другие столбцы в этой таблице?Мне интересно, если у вас есть только 70000, которые действительно имеют данные в этих столбцах индексов.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...