如何在单个字段下索引和搜索多个值。
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,但无法理解,因为没有例子。一个例子对我有好处。
答案 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);
每种处理器类型都应单独存储。