"Filanca" bulmak için nasıl

4 Cevap php

I'm building a search function for a php website using Zend Lucene and i'm having a problem. My web site is a Shop Director (something like that).

Örneğin ben "filanca" adında bir dükkan var ama benim ziyaretçiler "Foo Bar" Seach ve sıfır sonuç almak. Ayrıca bir dükkan "Foo Bar" adlı ve ziyaretçinin seaches "filanca" hiçbir şey bulunursa.

Ben "Foobar'ın ~" (bulanık seach) Seach çalıştım ama "Foo Bar" adlı makaleleri bulundu vermedi

Dizin oluşturmak veya sorgu yapmak için bir speciar yolu var mı?

4 Cevap

Seçenek 1: çeşitli noktalarda iki bölümden giriş sorgu dizesi kırın ve onları arayın. örn. Bu durumda sorgu (+ + bar fo) olacağını OR (+ foo + bar) OR (+ foob + ar) Sorun bu Dizgeciklere ayırma olup giriş sorgu dizesindeki iki işaret vardır varsayar. Ayrıca, muhtemelen alakasız ekstra alabilirsiniz, örneğin (+ foob + ar) sonuçları gibi sonuçları

Seçenek 2: n-gram Dizgeciklere ayırma ise indeksleme ve sorgulama. "Foo bar" için belirteçleri indeksleme sırasında oo, ba ar, fo olacaktır. Foobar'ın ile arama yaparken, jeton oo, ob, ba ar, fo olacaktır. Operatörü ile VEYA olarak aranıyor üstünde maksimum n-gram maçları ile belgeleri verecektir. Ile elde Bu kutu NGramTokenizer

Elle en yaygın isim karışıklıkları için dizin girişleri ekleyin. Müşterilerinizin özel bir form onları yazmanız alın.

Eğer "* foo * VE * bar *" veya "* foo * OR * bar *" denediniz mi? Bu Ferret çalışıyor ve ben Lucene dayanmaktadır okudum.

Eğer performansı hakkında umurumda değil, WildcardQuery (performans önemli ölçüde kötüdür) kullanın:

new WildcardQuery( new Term( "propertyName", "Foo?Bar" ) );

Sıfır veya daha fazla karakter, sıfır veya bir karakteri kullanmak için, '*' kullanmak '?'

Performansı önemli ise, BooleanQuery kullanmayı deneyin.