Zend Lucene, nasıl ki bir sorgu arama alanını değiştirebilirsiniz?

2 Cevap php

Benim endeksi kullanıcı arama sadece belirli alanları sağlayabilirsiniz "gelişmiş arama", oluşturmak çalışıyorum. Bunun için, ben bir boolean sorgu kullanıyorum:

$sq1 = Zend_Search_Lucene_Search_QueryParser::parse($field1); // <- provided by user
$sq2 = Zend_Search_Lucene_Search_QueryParser::parse($field2); // <- provided by user

$query = new Zend_Search_Lucene_Search_Query_Boolean();
$query->addSubquery($sq1, true);
$query->addSubquery($sq2, true);

$index->find($query);

Nasıl alan 'foo' arayacaktır o SQ1 belirtebilirsiniz belirtebilirsiniz ve SQ2 alanın 'bar' arayacaktır?

(Kullanıcı bir alan adını yazın olabilir çünkü) etkisi için farklı sorgular ayrıştırma gerekir gibi hissediyorum, ama belgeler sadece API sorgu ile kullanıcı girişi sorguları katılmak için QueryParser söz.

2 Cevap

Bunu yapmak için basit yolu sadece kullanıcı girişi geçiştirmek için görünüyor:

$sq1 = Zend_Search_Lucene_Search_QueryParser::parse("foo:($field1)");
$sq2 = Zend_Search_Lucene_Search_QueryParser::parse("bar:($field2)");

$ Alan1 ve $ field2 önceden "arama enjeksiyon" önlemek için parantez ve iki nokta üst üste atılmalı.

Ne istediğiniz sorgu inşaat API: http://www.zendframework.com/manual/en/zend.search.lucene.query-api.html#zend.search.lucene.queries.multiterm-query

Ancak, ben size tamamen Zend_Search_Lucene bırakmaları tavsiye ederim. Java uygulaması harika, ancak PHP uygulama çok kötü. Bunu yapmak için çalışıyoruz ne ilişkin soruya 1508748 görmek, çok adamcağız davranır. Ayrıca çok, çok yavaş.