PHP Zend Lucene Search Query с несколькими критериями не работает - PullRequest
0 голосов
/ 27 октября 2011

Zend Lucene Поиск документа

Lucene Document
    pk:Keyword
    category_id:Keyword
    title:UnStored
    description:UnStored

Это мой строковый запрос "java lucene AND + category_id: 7". Результат здесь:

Array
(
    [0] => Array
        (
            [pk] => 209
            [category_id] => 7
            [id] => 0
            [score] => 0.40750848701418
        )
   [1] => Array
        (
            [pk] => 225
            [category_id] => 7
            [id] => 3
            [score] => 0.30750848701619
        )

    [2] => Array
        (
            [pk] => 211
            <b>[category_id] => 8 ====>>> WRONG!!!</b> 
            [id] => 2
            [score] => 0.37152213415004
        )

)

Можете ли вы выполнить поиск по запросу только для category_id = 7 ?? Заранее спасибо.

Ответы [ 2 ]

2 голосов
/ 28 октября 2011

Я решил эту проблему с помощью Zend Query Parsing

$strQuery = Zend_Search_Lucene_Search_QueryParser::parse('java lucene');

$cateTerm  = new Zend_Search_Lucene_Index_Term(7 , 'category_id');
$cateQuery = new Zend_Search_Lucene_Search_Query_Term($cateTerm);

$query = new Zend_Search_Lucene_Search_Query_Boolean();
$query->addSubquery($strQuery, true /* required */);
$query->addSubquery($cateQuery, true /* required */);

Результаты будут только в category_id = 7:)

0 голосов
/ 27 октября 2011

Вы можете удалить AND +category_id:7 из запроса, вам нужен фильтр, поскольку +category_id:7 не требуется в качестве ранжированного значения.

Я не знаю, как реализовать его с помощью Zend_Lucene но в solr, который я использовал для передачи параметра fq, это может дать вам подсказку:)

Фильтрация - это процесс, который ограничивает пространство поиска и позволяет рассматривать только подмножество документов для поиска совпадений.Вы можете использовать эту функцию для реализации результатов поиска в поиске.Lucene поставляется с различными встроенными фильтрами, такими как BooleanFilter, CachingWrapperFilter, ChainedFilter, DuplicateFilter, PrefixFilter, QueryWrapperFilter, RangeFilter, RemoteCachingWrapperFilter, SpanFilter, и т. Д.фильтровать документы, соответствующие критериям фильтра.

...