私は、neo4j-lucene-index ライブラリによって提供されるサポートを通じて、Neo4j (1.9) と lucene コア 3.5 を使用しています。私のコードでは、次のような新しいノード インデックスを作成します。
HashMap<String, String> stringMap = new HashMap<String, String>();
stringMap.put("type", "fulltext");
stringMap.put(IndexManager.PROVIDER, "lucene");
stringMap.put("to_lower_case", "false");
stringMap.put("similarity", MySimilarity.class.getName());
stringMap.put("analyzer", MyAnalyzer.class.getName());
simpleIndex = (LuceneIndex<Node>) template.getGraphDatabaseService()
.index().forNodes("simple-index", stringMap);
マルチフィールド クエリを使用してノード インデックスをクエリします。
Analyzer analyzer = new MyAnalyzer();
Query query = null;
try {
query = MultiFieldQueryParser.parse(Version.LUCENE_35,
queriesArray, fieldsArray, flagsArray, analyzer);
} catch (ParseException e) {
e.printStackTrace();
return;
}
if (query == null)
return;
QueryContext qc = new QueryContext(query).sortByScore();
IndexHits<Node> hits = simpleIndex.query(qc);
スコアによる並べ替えに使用される Similarity の実装を MySimilarity クラス (DefaultSimilarity を拡張し、そのメソッドの一部をオーバーライドする) に変更するにはどうすればよいですか? 報告されたクエリは常に DefaultSimilarity を使用しており、クエリ中にアクティブ化されたサーチャーが使用する類似性を設定するためのフックを見つけることができませんでした。