使用同义词的行为错误

时间:2014-03-03 22:13:29

标签: solr lucene synonym

我在使用同义词时遇到了问题(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\""));

有什么想法?

0 个答案:

没有答案