Zend_Search_Lucene sorgu ayrıştırma sorunu

1 Cevap php

İşte kurulum, ben bir Lucene İndeksi var ve ben endeksli olması 2,000 belgelerle iyi çalışır. Ben sorguları debug Luke (Lucene Endeksi Araç, v.0.9.2) kullanıyorum ve ZF 1.9 kullanıyorum.

Aşağıdaki gibi benim Lucene Endeksi için düzeni:

I = Indexed
T = Tokenized
S = Stored

Fields:
author - ITS
category - ITS
publication - ITS
publicationdate - IS
summary - ITS
title - ITS

Temelde mix ve yukarıdaki bilgilerin herhangi bir maç icar, yukarıdaki alanlara göre aranabilir bir form var, ve bir zend luceue sorgu ayrıştırmak olacaktır. Bu sorun, sorun değil ben terimleri birleştirerek başladığınızda, bulmak içinde yangınlar sorgu sadece kaybolmasına neden olur "optimize" yöntemi.

İşte ben şu anda kullanıyorum bir örnek arama:

Form Version:

Title: test title
Publication: publication name

Lucene Query Parse:

+(title:test title) +(publication:publication name)

Ben bu sorgu dize almak ve LUKE içine tokat, ve "Ara" hit Şimdi, eğer sonuç gayet döndürür. Out Sorgu Bul yöntemini kullanabilirsiniz, bu bombalar. Yani (Ben inanıyorum) bu işlevleri nasıl içine biraz araştırma yaptım ve bir sorun buldu

Öncelikle, heres arama yapar kod gerçek hatları:

$searchQuery = "+(title:test title) +(publication:publication name)";
$hits = new ArrayObject($this->index->find($searchQuery));

Bu gerçek kod basitleştirilmiş versiyonu, ama üretir ne bu.

Şimdi burada ne bazı hata ayıklama sonra, "optimize" yöntemi sadece sorguyu kendisi yok fark ettik. Ben aşağıdaki kodu oluşturuldu:

$rewrite = $searchQuery->rewrite($this->index);
$optimize = $searchQuery->rewrite($this->index)->optimize($this->index); 
echo "======<br/>";
echo "Original: ".$searchQuery."<br/>";
echo "Rewrite: ".$rewrite."<br/>";
echo "Optimized + Rewrite: ".$optimize."<br/>";
echo "======<br/>";

Hangi aşağıdaki metni verir:

======
Original: +(title:test title) +(publication:publication name)
Rewrite: +(title:test title) +(publication:publication name)
Optimized + Rewrite: 
======

3. çıkış tamamen boş olduğunu nasıl fark. Bu Rewrite & Optimize sorguda sadece kendini boş sorgu dizesi neden olduğu görülmektedir.

Herkes optimize yöntemi sadece hep birlikte benim sorgu kaldırılması gibi görünüyor neden herhangi bir fikrin var mı? Ben çözümlü gerekebilir bir filtre veya arayüz çeşit eksik? Luke yapıştırın ve elle dizin karşı onları çalıştırdığınızda tüm sorgular mükemmel çalışır, ama aptal şey Zend arama yapmak için sorgu ayrıştırma yolu ile oluyor.

Herhangi bir yardım takdir edilmektedir.

1 Cevap

Ben oldukça dürüst olacak, Zend_Search_Lucene (ZSL) arabası ve artık uzun zamandan beri muhafaza değil.

It is also conceptually wrong. Let me explain why: Search engines are there to reply fast to search queries, the problem with ZSL is that it is implemented in pure PHP. It means that at every query, all indexes files are read and reloaded again, continuously. It can't be fast.

Lucene kendisi ile yanlış bir şey yok, Lucene dayanmaktadır Solr hangi adında çok iyi bir alternatif bile var: Java uygulanan bir arama sunucu olduğu yapabilirsiniz endeksi ve tüm Lucene sorgulara cevap. Çünkü Solr sunucu doğası, tekrar ve tekrar tüm Lucene dosyaları yeniden tarafından kötü performans olmaz.

Bu :) sen benim ZSL hata çözülmesi için iki yıl bekledim, ne sordu, o SOLR kullanarak şimdi durum o biraz farklı