Спящий люцен только ищет в 60 первых записях - PullRequest
1 голос
/ 23 марта 2020

У меня более 500 записей в таблице, но Hibernate lucene выполняет поиск только в 60 лучших записях.

Я использую сеанс hibernate вместо менеджера сущностей.

Как мне искать во всех записей. Это мой код:

Мой hibernate.cfg

<hibernate-configuration>
    <session-factory>
        <property name="hibernate.connection.driver_class">com.microsoft.sqlserver.jdbc.SQLServerDriver</property>
        <property name="hibernate.dialect">org.hibernate.dialect.SQLServer2012Dialect</property>
        <property name="cache.provider_class">org.hibernate.cache.NoCacheProvider</property>
        <property name="show_sql">true</property>
        <property name="hibernate.current_session_context_class">thread</property>
        <property name="hibernate.globally_quoted_identifiers">true</property>
        <property name="hibernate.show_sql">true</property>
        <property name="hibernate.connection.release_mode">auto</property>
        <property name="hibernate.connection.autoReconnect">true</property>
        <property name="hibernate.transaction.auto_close_session">true</property>
        <property name="hibernate.id.new_generator_mappings">true</property>
        <property
            name="hibernate.transaction.flush_before_completion">true</property>
        <property name="hibernate.search.default.indexBase">D:/tvc/indexes</property>
        <mapping class="com.hellojob.entities.WebsiteOrderContract" />
    </session-factory>
</hibernate-configuration>

Моя сущность:

@Entity
@Indexed
@AnalyzerDef(name = "customanalyzer",
        charFilters = {
            @CharFilterDef(factory = MappingCharFilterFactory.class
            //, params = {@Parameter(name = "mapping", value = "org/hibernate/search/test/analyzer/mapping-chars.properties")}
            )
        },
        tokenizer = @TokenizerDef(factory = StandardTokenizerFactory.class),
        filters = {
            @TokenFilterDef(factory = ASCIIFoldingFilterFactory.class),
            @TokenFilterDef(factory = LowerCaseFilterFactory.class), //    @TokenFilterDef(factory = StopFilterFactory.class, params = {@Parameter(name="words", value= "org/hibernate/search/test/analyzer/stoplist.properties" ),@Parameter(name="ignoreCase", value="true")})
        })
@Table(name = "Website_OrderContract")
public class WebsiteOrderContract implements java.io.Serializable {

    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    @Column(name = "ID", insertable = false, updatable = false)
    private Integer id;

    @Field(index = Index.YES, analyze = Analyze.YES, store = Store.NO, analyzer = @Analyzer(definition = "customanalyzer"))
    @Column(name = "Name")
    private String name;
}

Мой DAO:

FullTextSession fullTextSession = Search.getFullTextSession(session);
                    QueryBuilder qb = fullTextSession.getSearchFactory().buildQueryBuilder()
                            .forEntity(WebsiteOrderContract.class).get();
                    org.apache.lucene.search.Query query = qb
                            .all()
                            .createQuery();
                    FullTextQuery hibQuery = fullTextSession.createFullTextQuery(query, WebsiteOrderContract.class);
                    hibQuery.setFirstResult(0);
                    hibQuery.setMaxResults(10);
                    rs = hibQuery.list();
                    System.out.println(hibQuery.getResultSize()); // 60 results, must be 590
                    System.out.println(rs.size()); // 10 result

Благодарю вас.

1 Ответ

0 голосов
/ 23 марта 2020

Наиболее вероятным объяснением является то, что ваши сущности не были проиндексированы.

  1. Вы позаботились об индексации уже существующих данных, например, используя Mass indexer ?
  2. Вы проверяли журналы, чтобы увидеть, есть ли ошибки индексации?
...