Zend_Search_Lucene ile sayılar aranıyor

2 Cevap php

Peki neden Aşağıdaki ilk arama örneği sonucu çıkmıyor? Ve sayısı mümkün arar yapmak için aşağıdaki kodu değiştirme konusunda herhangi bir fikir çok takdir.

Create the index

$index = new Zend_Search_Lucene('/myindex', true);
$doc->addField(Zend_Search_Lucene_Field::Text('ssn', '123-12-1234'));
$doc->addField(Zend_Search_Lucene_Field::Text('cats', 'Fluffy'));
$index->addDocument($doc);
$index->commit();

Search - NO RESULTS

$index = new Zend_Search_Lucene('/myindex', true);
$results = $index->find('123-12-1234');

Search - WITH RESULTS

$index = new Zend_Search_Lucene('/myindex', true);
$results = $index->find('Fluffy');

2 Cevap

Önce numaraları dahil etmek için metin analizörü değiştirmek gerekir

Zend_Search_Lucene_Analysis_Analyzer :: setDefault (yeni Zend_Search_Lucene_Analysis_Analyzer_Common_TextNum ());

Then for fields with numbers you want to use Zend_Search_Lucene_Field::Keyword instead of Zend_Search_Lucene_Field::Text this will skip the the creation of tokens and saves the value 'as is' into the index. Then you can search by it. I don't know how it behaves with floats ( is probably not going to work for floats 3.0 is not going to match 3) but for natural numbers ( like ids ) works like a charm.

Bu seçtiğiniz hangi Analyzer bir etkisidir.

I / maç default Analyzer olacak sadece indeks terimleri [a-Za-z] + / inanıyorum. Bu SSN bir terim olarak dizine eklenen anlamına gelir.

Eğer metin + sayısal harf duyarsız Analyzer geçti bile, ne istiyorsun yine çalışmaz. Bir dönem için ifadesi / [a-zA-Z0-9] + / Bu terimler dizine eklenir demektir 12,123,1234 olurdu.

Eğer 123-12-1234 geçerli bir terim olarak görülebilir gerekiyorsa, muhtemelen Zend_Search_Lucene_Analysis_Analyzer_Common genişletmek ve 123-12-1234 bir terim olduğunu bunu yapmak için ihtiyacımız olacak.

See http://framework.zend.com/manual/en/zend.search.lucene.extending.html#zend.search.lucene.extending.analysis

Diğer seçenek bir Zend_Search_Lucene_Field :: Anahtar Kelime olarak SSN saklamaktır. Bir anahtar terimleri içine kadar kırık değil beri.

http://framework.zend.com/manual/en/zend.search.lucene.html#zend.search.lucene.index-creation.understanding-field-types