In meinem Neo4j 3.0.3 und SDN 4.2.0.BUILD-snapshot ich folgende Konfiguration erstellt haben:Neo4j 3x und Legacy-node_auto_indexing mit benutzerdefinierten Lucene Analyzer
@Configuration
@EnableNeo4jRepositories(basePackages = "com.example")
@EnableTransactionManagement
public class Neo4jTestConfig extends Neo4jConfiguration {
private static final String NEO4J_EMBEDDED_DATABASE_PATH_PROPERTY = "neo4j.embedded.database.path";
@PostConstruct
public void init() {
Components.setDriver(new EmbeddedDriver(graphDatabaseService()));
EmbeddedDriver embeddedDriver = (EmbeddedDriver) Components.driver();
GraphDatabaseService databaseService = embeddedDriver.getGraphDatabaseService();
try (Transaction t = databaseService.beginTx()) {
Index<Node> autoIndex = databaseService.index().forNodes("node_auto_index");
databaseService.index().setConfiguration(autoIndex, "type", "fulltext");
databaseService.index().setConfiguration(autoIndex, "to_lower_case", "true");
databaseService.index().setConfiguration(autoIndex, "analyzer", StandardAnalyzerV36.class.getName());
t.success();
}
}
public GraphDatabaseService graphDatabaseService() {
// @formatter:off
GraphDatabaseService graphDatabaseService = new GraphDatabaseFactory()
.newEmbeddedDatabaseBuilder(new File(environment.getProperty(NEO4J_EMBEDDED_DATABASE_PATH_PROPERTY)))
.setConfig(GraphDatabaseSettings.node_keys_indexable, "name,description")
.setConfig(GraphDatabaseSettings.node_auto_indexing, "true").
newGraphDatabase();
// @formatter:on
return graphDatabaseService;
}
...
}
auch habe ich umgesetzt StandardAnalyzerV36:
public final class StandardAnalyzerV36 extends Analyzer {
public static final CharArraySet STOP_WORDS_SET = StopAnalyzer.ENGLISH_STOP_WORDS_SET;
@Override
protected TokenStreamComponents createComponents(String fieldName) {
final ClassicTokenizer src = new ClassicTokenizer();
TokenStream tok = new StandardFilter(src);
tok = new StopFilter(new LowerCaseFilter(tok), STOP_WORDS_SET);
return new TokenStreamComponents(src, tok);
}
@Override
protected Reader initReader(String fieldName, Reader reader) {
return new HTMLStripCharFilter(reader);
}
...
}
Gerade jetzt mein Test schlägt fehl, da der lo oks wie StandardAnalyzerV36
wird nicht korrekt auf den Index angewendet.
Was mache ich falsch und wie repariere ich es?
AKTUALISIERT Ich versuche Treiber zu konfigurieren mit ogm.properties
:
driver=org.neo4j.ogm.drivers.embedded.driver.EmbeddedDriver
dbms.auto_index.nodes.keys=name,description
dbms.auto_index.nodes.enabled=true
und config:
@Configuration
@EnableNeo4jRepositories(basePackages = "com.example")
@EnableTransactionManagement
public class Neo4jTestConfig extends Neo4jConfiguration {
@Resource
private Environment environment;
@PostConstruct
public void init() {
EmbeddedDriver embeddedDriver = (EmbeddedDriver) Components.driver();
GraphDatabaseService databaseService = embeddedDriver.getGraphDatabaseService();
try (Transaction t = databaseService.beginTx()) {
Index<Node> autoIndex = databaseService.index().forNodes("node_auto_index");
databaseService.index().setConfiguration(autoIndex, "type", "fulltext");
databaseService.index().setConfiguration(autoIndex, "to_lower_case", "true");
databaseService.index().setConfiguration(autoIndex, "analyzer", StandardAnalyzerV36.class.getName());
t.success();
}
}
@Override
public SessionFactory getSessionFactory() {
return new SessionFactory("com.example");
}
}
, aber es funktioniert immer noch nicht.
Welche Einstellungen sollten in ogm.properties
vorgenommen werden?
Ich habe 'ogm.properties' hinzugefügt, um embedded Laufwerk ohne' Components.setDriver (new EmbeddedDriver (graphDatabaseService())) zu konfigurieren; 'sieht aber aus wie' dbms.auto_index.nodes.keys', 'dbms .auto_index.nodes.keys' funktioniert nicht so. Was mache ich falsch ? – alexanoid