Lucene:如何在单个字段下索引和搜索多个值

时间:2013-09-22 18:33:21

标签: lucene

如何在单个字段下索引和搜索多个值。

e.g。假设我有一个字段处理器,可能有 i3,i5,i7 i3 i3,i5 值。 现在想象一下笔记本电脑数据如下:

DATA1:

 name= laptop name
 price = laptop price
 processor=core duo

DATA2:

 name= laptop name
 price = laptop price
 processor=i3,i5

DATA3:

 name= laptop name
 price = laptop price
 processor=i3,i5,i7

现在,

如果用户想要只搜索i3和i5处理器,它应该显示data2&仅限data3。

所以我的问题是我应该如何索引搜索 lucene。我正在使用lucene 4.4。

我检查了this,但无法理解,因为没有例子。一个例子对我有好处。

2 个答案:

答案 0 :(得分:4)

坦率地说,它并没有太多。使用StandardAnalyzer和标准QueryParser,只需将字段添加到文档中,如下所示:

Document document = new Document();
document.add(new TextField("name", "laptop name"));
document.add(new TextField("processor", "i3,i5,i7"));
//Add other fields as needed...
//Assuming you've set up your writing to use StandardAnalyzer...
writer.addDocument(document);

StandardAnalyzer会对标点符号(和空格等)进行标记,在“处理器”字段中索引标记“i3”,“i5”和“i7”,因此在使用标准QueryParser时(参见query parser syntax),查询:

processor:(i3 i5)

将在“处理器”字段中找到任何带有“i3”或“i5”的字段

答案 1 :(得分:0)

您可以通过我的源代码激发灵感:http://git.abclinuxu.cz/?p=abclinuxu.git;a=tree;f=src/cz/abclinuxu/utils/search;h=d825ec75da1b19ca0cd6065458fec771de174be9;hb=HEAD

MyDocument是构造LuceneDocument的POJO。重要信息存储在Field中,因此可以搜索。我的文档类型与您的处理器类型类似:

Field field = new Field(TYPE, type, Field.Store.YES, Field.Index.UN_TOKENIZED);

每种处理器类型都应单独存储。

相关问题