我在使用同义词时遇到了问题(Lucene 4.6.1)。这些是我的conf和测试用例。
SynonymFilterFactory配置。
Map<String,String> initialParams = Maps.newHashMap();
initialParams.put("synonyms","synonym.txt");
initialParams.put("ignoreCase","true");
initialParams.put("expand","true");
initialParams.put("format","solr");
initialParams.put("luceneMatchVersion",Version.LUCENE_40.toString());
SynonymFilterFactory synonymFilterFactory = new SynonymFilterFactory(initialParams);
Synonyms.txt
american league, al, a.l. , a/l
Cassius clay, Muhammad ali
文本#1的测试用例
Text #1: The american League is on fire.
//积极案例(一切正常)
Assert.assertTrue(LuceneUtil.evaluate(t1, "al"));
Assert.assertTrue(LuceneUtil.evaluate(t1, "a.l."));
Assert.assertTrue(LuceneUtil.evaluate(t1, "a/l"))
//否定案例(工作正常)
Assert.assertFalse(LuceneUtil.evaluate(t1, "a.l.s"));
Assert.assertFalse(LuceneUtil.evaluate(t1, "a/l/s"));
//不工作
Assert.assertFalse(LuceneUtil.evaluate(t1, "\"al capone\""));
虽然我正在尝试创建一个短语查询“al capone”,但似乎lucene正在查询2个术语al OR capone。
但由于“Cassius Clay”不匹配“Cassius其他词”,所以同义词列表没有发生。
文字#2的测试用例 //工作
Text #2: Muhammad ali is the best
Assert.assertFalse(LuceneUtil.evaluate(t2, "\"Cassius other words\""));
有什么想法?