Запрос в Lucene - PullRequest
       33

Запрос в Lucene

2 голосов
/ 16 июня 2009

Структура таблицы "testtable" составляет

  1. id int первичный ключ

  2. productid int

  3. attributeid int

  4. значение varchar (250)

где productid - это уникальный идентификатор продукта, attributeid - это уникальный идентификатор атрибута продукта, например, размер, качество, высота, цвет а 'value' - это значение атрибута

Мне нужно отфильтровать результат. По этому запросу я выполняю требование. Но я не могу сделать это в запросе.

select a.* from dbo.testtable a
where a.attributeId=10 and a.[Value]='Romance'
and productId in
(
    select productId
    from
    dbo.testtable where attributeId =7 and [Value]='Hindi'
)

Нужна помощь для создания этого запроса ..

Ответы [ 2 ]

4 голосов
/ 27 июня 2009

Я думаю, вы должны сделать это в два этапа:

Шаг 1: извлечь идентификаторы продуктов

BooleanQuery query = new BooleanQuery();

query.add(new TermQuery("attributeId", 7), BooleanClause.Occur.MUST); 
query.add(new TermQuery("value", "hindi"), BooleanClause.Occur.MUST); 
TopDocs docs = searcher.search(query, null, searchLimit);

Затем вам нужно извлечь идентификатор продукта из документов

Шаг 2: выполнить запрос

BooleanQuery query = new BooleanQuery();

query.add(new TermQuery("attributeId", 10), BooleanClause.Occur.MUST); 
query.add(new TermQuery("value", "Romance"), BooleanClause.Occur.MUST); 

// build "IN" clause
BooleanQuery pidQuery = new BooleanQuery();
for( long productId : productIds ){
    pidQuery.add(new TermQuery("productId", productId), BooleanClause.Occur.SHOULD); 
}
query.add(pidQuery, BooleanClause.Occur.MUST); 
TopDocs docs = searcher.search(query, null, searchLimit);
0 голосов
/ 16 июня 2009

Посмотрите на использование Hibernate Search, который предоставляет вам семантику поиска на основе lucene в базе данных. Или посмотрите на luke и выясните, как lucene проиндексировал ваши данные. Поэкспериментируйте с ним, и он поможет вам формировать запросы на lucene, поскольку он даст вам более глубокий взгляд на индексацию и поиск lucene.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...