2009-02-13 4 views
5

Vậy tại sao ví dụ tìm kiếm đầu tiên dưới đây không trả về kết quả? Và bất kỳ ý tưởng nào về cách sửa đổi mã bên dưới để thực hiện tìm kiếm số có thể sẽ được đánh giá cao.Tìm số bằng Zend_Search_Lucene

Tạo chỉ số

$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(); 

tìm kiếm - Không có kết quả

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

tìm kiếm - VỚI KẾT QUẢ

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

Trả lời

2

Đây là một hiệu ứng trong đó phân tích mà bạn đã chọn.

Tôi tin rằng default Analyzer sẽ chỉ lập chỉ mục các cụm từ khớp với/[a-zA-Z] + /. Điều này có nghĩa là SSN của bạn không được thêm vào chỉ mục dưới dạng thuật ngữ.

Thậm chí nếu bạn đã chuyển sang phân tích phân tích chữ hoa chữ thường hoặc chữ số, những gì bạn muốn vẫn sẽ không hoạt động. Biểu thức cho cụm từ là/[a-zA-Z0-9] +/điều này có nghĩa là các cụm từ của bạn được thêm vào chỉ mục sẽ là 12,123,1234.

Nếu bạn cần 123-12-1234 để được xem là một thuật ngữ hợp lệ, có thể bạn sẽ cần phải mở rộng Zend_Search_Lucene_Analysis_Analyzer_Common và làm cho nó để 123-12-1234 là một thuật ngữ.

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

lựa chọn nào khác của bạn là để lưu trữ các ssn như một Zend_Search_Lucene_Field :: Từ khoá. Vì từ khóa không được chia thành các thuật ngữ.

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

3

Trước tiên, bạn cần phải thay đổi Analizer văn bản của bạn để bao gồm số

Zend_Search_Lucene_Analysis_Analyzer :: setDefault (Zend_Search_Lucene_Analysis_Analyzer_Common_TextNum mới());

Sau đó cho các trường có số điện thoại bạn muốn sử dụng Zend_Search_Lucene_Field :: Từ khoá thay vì Zend_Search_Lucene_Field :: Tiêu này sẽ bỏ qua việc tạo ra các thẻ và tiết kiệm giá trị 'như là' vào chỉ mục. Sau đó, bạn có thể tìm kiếm theo nó. Tôi không biết làm thế nào nó cư xử với phao nổi (có lẽ sẽ không làm việc cho nổi 3,0 sẽ không phù hợp với 3) nhưng đối với số tự nhiên (như id) hoạt động như một say mê.