Я новичок в 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.");
}