4

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

例如,假设我有一个可能具有i3、i5、i7i3i3、i5值的现场处理器。现在想象一台笔记本电脑的数据如下:

数据1:

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

数据2:

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

数据3:

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

现在,

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

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

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

4

2 回答 2

6

坦率地说,它并没有太多的东西。使用 usingStandardAnalyzer和 standard 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(参见查询解析器语法),查询:

processor:(i3 i5)

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

于 2013-09-23T04:40:47.270 回答
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 = new Field(TYPE, type, Field.Store.YES, Field.Index.UN_TOKENIZED);

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

于 2013-09-22T18:43:07.707 回答