【问题标题】:Lucene Phrase Query and Tokenized IndexingLucene 短语查询和标记化索引
【发布时间】:2015-09-21 04:17:51
【问题描述】:

我在使用短语查询搜索 lucene 标记化索引时遇到了一个奇怪的问题。

我通过以下方式创建索引

Document doc = new Document();
FieldType ft = new FieldType(StringField.TYPE_STORED);
ft.setTokenized(true);
Field field1 = new Field("key", "T-Test 1", ft); 
doc.add(field1)
Field field2 = new Field("key", "T-Test 2", ft); 
doc.add(field2)    
Field field3 = new Field("key", "T-Test 3", ft); 
doc.add(field3)    
Field field4 = new Field("key", "T-Test", ft); 
doc.add(field4)

我使用 WhitespaceAnalyzer 对值进行标记。 如果我现在想搜索字符串“T-Test”,我会得到值 T 检验 1、T 检验 2、T 检验 3、T 检验

我通过以下方式创建查询。

PhraseQuery query = new PhraseQuery();
query.add(new Term("key","T-Test"));
query.setSlop(0);      
BooleanQuery mainQuery = new BooleanQuery();
mainQuery.add(query, Occur.MUST);

我也尝试使用具有相同效果的 ComplexPhraseQueryParser。我只是得到所有的 T 检验值。但我只想要 T-Test 而不是“T-Test 1、T-Test 2 和 T-Test 3” 谁能帮帮我。 我快要绝望了 谢谢

【问题讨论】:

    标签: search indexing lucene tokenize phrase


    【解决方案1】:

    我只是使用 Stringfield 来解决问题。这个解决方案效果很好。

    FieldType ft = new FieldType(StringField.TYPE_STORED);
    ft.setTokenized(true);
    StringField field = new StringField(key, value,Field.Store.YES);
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2012-08-12
      • 2015-01-19
      • 1970-01-01
      • 1970-01-01
      • 2013-10-03
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多