Questo contenuto non è disponibile nella lingua selezionata.
2.4. Configure Indexing
2.4.1. Configure Indexing in Library Mode Using XML Copia collegamentoCollegamento copiato negli appunti!
<indexing ... /> element to the cache configuration in the Infinispan core configuration file, and optionally pass additional properties in the embedded Lucene-based Query API engine. For example:
Example 2.3. Configuring Indexing Using XML in Library Mode
<?xml version="1.0" encoding="UTF-8"?>
<infinispan
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="urn:infinispan:config:6.4
http://www.infinispan.org/schemas/infinispan-config-6.4.xsd"
xmlns="urn:infinispan:config:6.4">
<replicated-cache>
<indexing enabled="true">
<properties>
<property name="default.directory_provider" value="ram" />
</properties>
</indexing>
</replicated-cache>
</infinispan>
2.4.2. Configure Indexing Programmatically Copia collegamentoCollegamento copiato negli appunti!
Author, which is stored in the grid and made searchable via two properties, without annotating the class.
Example 2.4. Configure Indexing Programmatically
import java.util.Properties;
import org.hibernate.search.cfg.SearchMapping;
import org.infinispan.Cache;
import org.infinispan.configuration.cache.Configuration;
import org.infinispan.configuration.cache.ConfigurationBuilder;
import org.infinispan.manager.DefaultCacheManager;
import org.infinispan.query.CacheQuery;
import org.infinispan.query.Search;
import org.infinispan.query.SearchManager;
import org.infinispan.query.dsl.Query;
import org.infinispan.query.dsl.QueryBuilder;
[...]
SearchMapping mapping = new SearchMapping();
mapping.entity(Author.class).indexed().providedId()
.property("name", ElementType.METHOD).field()
.property("surname", ElementType.METHOD).field();
Properties properties = new Properties();
properties.put(org.hibernate.search.Environment.MODEL_MAPPING, mapping);
properties.put("[other.options]", "[...]");
Configuration infinispanConfiguration = new ConfigurationBuilder()
.indexing()
.enable()
.withProperties(properties)
.build();
DefaultCacheManager cacheManager = new DefaultCacheManager(infinispanConfiguration);
Cache<Long, Author> cache = cacheManager.getCache();
SearchManager sm = Search.getSearchManager(cache);
Author author = new Author(1, "FirstName", "Surname");
cache.put(author.getId(), author);
QueryBuilder qb = sm.buildQueryBuilderForClass(Author.class).get();
Query q = qb.keyword().onField("name").matching("FirstName").createQuery();
CacheQuery cq = sm.getQuery(q, Author.class);
Assert.assertEquals(cq.getResultSize(), 1);
2.4.3. Configure the Index in Remote Client-Server Mode Copia collegamentoCollegamento copiato negli appunti!
- NONE
- LOCAL = indexLocalOnly="true"
- ALL = indexLocalOnly="false"
Example 2.5. Configuration in Remote Client-Server Mode
<indexing index="LOCAL">
<property name="default.directory_provider" value="ram" />
<!-- Additional configuration information here -->
</indexing>
By default the Lucene caches will be created as local caches; however, with this configuration the Lucene search results are not shared between nodes in the cluster. To prevent this define the caches required by Lucene in a clustered mode, as seen in the following configuration snippet:
Example 2.6. Configuring the Lucene cache in Remote Client-Server Mode
<cache-container name="clustered" default-cache="repltestcache">
[...]
<replicated-cache name="LuceneIndexesMetadata" mode="SYNC">
<transaction mode="NONE"/>
<indexing index="NONE"/>
</replicated-cache>
<distributed-cache name="LuceneIndexesData" mode="SYNC">
<transaction mode="NONE"/>
<indexing index="NONE"/>
</distributed-cache>
<replicated-cache name="LuceneIndexesLocking" mode="SYNC">
<transaction mode="NONE"/>
<indexing index="NONE"/>
</replicated-cache>
[...]
</cache-container>
2.4.4. Rebuilding the Index Copia collegamentoCollegamento copiato negli appunti!
- The definition of what is indexed in the types has changed.
- A parameter affecting how the index is defined, such as the
Analyserchanges. - The index is destroyed or corrupted, possibly due to a system administration error.
MassIndexer and start it as follows:
SearchManager searchManager = Search.getSearchManager(cache);
searchManager.getMassIndexer().start();