2011-11-23 41 views
15

Tôi gặp sự cố trong Tìm kiếm SOLR.
Tôi có một dữ liệu như thế này:
enter image description hereTìm kiếm không phân biệt chữ hoa chữ thường SOLR

tôi sử dụng Solr quản trị để tìm dữ liệu này sử dụng truy vấn như thế này:

address_s:*Nadi* 

và tìm thấy những dữ liệu. Nhưng khi tôi sử dụng truy vấn này:

address_s:*nadi* 

nó không tìm thấy gì cả.
Tôi đã googling và tôi thấy một câu trả lời để tạo ra một lĩnh vực với các kịch bản sau đây:

<fieldType name="c_text" class="solr.TextField"> 
    <analyzer type="index"> 
     <tokenizer class="solr.WhitespaceTokenizerFactory"/> 
     <filter class="solr.LowerCaseFilterFactory"/> 
    </analyzer> 

    <analyzer type="query"> 
     <tokenizer class="solr.WhitespaceTokenizerFactory"/> 
     <filter class="solr.LowerCaseFilterFactory"/> 
    </analyzer> 
</fieldType> 

Tôi đã copy dán những kịch bản vào schema.xml, nhưng nó vẫn không hoạt động. Tôi nên làm gì? Ai giúp tôi với?

Trả lời

11

Trường address_s nên được định nghĩa là -

<field name="address_s" type="c_text" indexed="true" stored="true"/> 

Nếu bạn đang sử dụng schema.xml mặc định,, định nghĩa này nên đến trước -

<dynamicField name="*_s" type="string" indexed="true" stored="true"/> 

trong đó xác định nó như là một loại lĩnh vực chuỗi không có phân tích nào được thực hiện.

Truy vấn bằng ký tự đại diện không được phân tích.
Vì vậy, nếu bạn áp dụng bộ lọc chữ thường ở truy vấn thời gian chỉ mục address_s:*nadi* sẽ hoạt động.
Tuy nhiên, truy vấn address_s:*Nadi * sẽ không, vì Nadi sẽ không khớp với nadi trong chỉ mục và bạn sẽ cần phải giảm trường hợp truy vấn ở phía khách hàng.

+1

Tôi đã làm theo hướng dẫn của bạn, nhưng nó vẫn không thể hoạt động. Tôi sao chép dán '' vào schema.xml và chạy lại 'java -jar start.jar' và thử truy vấn . Xin lỗi, tôi muốn hỏi trước, tôi đã sử dụng schema.xml tại .. \ solr_302 \ example \ solr \ conf, đúng không?.? – Praditha

+0

đây là công việc, tôi cần phải chèn lại tài liệu trước. cảm ơn,. bạn có biết cách xác định trường đó thông qua PHP không? vì vậy tôi không cần phải định nghĩa nó trong schema.xml theo cách thủ công. – Praditha

+5

'Tuy nhiên, địa chỉ truy vấn_s: * Nadi * sẽ không, vì Nadi sẽ không khớp với nadi trong chỉ mục' - Nhưng không phải là điểm có' LowerCaseFilterFactory' trong '', vì vậy rằng * truy vấn * được hạ thấp tự động? – Madbreaks

5

Trường địa chỉ_s của bạn có sử dụng loại trường c_text này trong tệp schema.xml của bạn không?

Nếu chỉ mục của bạn đã được tạo bằng cấu hình trước đó, bạn cần phải lập chỉ mục lại mọi thứ để thực hiện thay đổi.

+0

Cách thực hiện điều đó,.? bởi vì tôi tạo tất cả các trường bằng cách sử dụng php. Tôi nhập tất cả các trường vào mảng như sau: $ data = array (..., 'address_s' => 'value', 'city_name_s' => 'value', ...); và sử dụng hàm addDocument ($ data). Bất kỳ ý tưởng.,? – Praditha

+3

Sau đó, bạn cần phải chạy lại các lệnh này cho tất cả các tài liệu đã được thêm vào chỉ mục. Việc biểu diễn dữ liệu trong chỉ mục phụ thuộc vào máy phân tích đã được sử dụng. Do đó, nếu bạn cập nhật trình phân tích mà bạn sử dụng để lập chỉ mục, bạn cần phải lập chỉ mục lại tất cả tài liệu của mình. – jpountz

+0

xin lỗi, tôi vẫn không hiểu tôi nên làm gì, bạn có thể mô tả nó từng bước: D và khi tôi nên sử dụng 'c_text' loại trường cho tất cả các chỉ mục, khi tôi chạy lại lệnh php của tôi,.? – Praditha

5

Tôi đã sử dụng điều này như kiểu trường:

<fieldType name="string" class="solr.TextField"> 
    <analyzer type="index"> 
    <tokenizer class="solr.WhitespaceTokenizerFactory"/> 
    <filter class="solr.LowerCaseFilterFactory"/> 
    </analyzer> 
    <analyzer type="query"> 
    <tokenizer class="solr.WhitespaceTokenizerFactory"/> 
    <filter class="solr.LowerCaseFilterFactory"/> 
    </analyzer> 
</fieldType> 

Và định nghĩa lĩnh vực của tôi sử dụng:

<field name="address" type="string" indexed="true" stored="true"/> 

Kết quả: tài liệu của tôi trả về các lĩnh vực trong trường hợp bên phải (như chèn) và tôi có thể tìm kiếm chữ hoa chữ thường (sử dụng cả chữ hoa và chữ thường) ...

Phiên bản: Solr 3.6

+0

điều này sẽ cung cấp cho bạn một lỗi –

1

Tôi đã sử dụng một cái gì đó như thế này ... Trong giản đồ.xml tôi đã đặt một fieldType mới

<fieldType name="newType" class="solr.TextField" positionIncrementGap="100"> 
     <analyzer type="index"> 
     <tokenizer class="solr.KeywordTokenizerFactory"/> 
     <filter class="solr.LowerCaseFilterFactory"/> 
     <filter class="solr.ReversedWildcardFilterFactory" /> 
     </analyzer> 
     <analyzer type="query"> 
     <tokenizer class="solr.KeywordTokenizerFactory"/> 
     <filter class="solr.LowerCaseFilterFactory"/> 
     <filter class="solr.ReversedWildcardFilterFactory" /> 
     </analyzer> 
</fieldType> 

Gán kiểu mới vào lĩnh vực mà bạn muốn làm cho nó trường hợp & khoảng trắng không nhạy cảm Sau đó, bạn phải xây dựng các truy vấn Solr trong các hình thức: fieldName:(*fieldValue\ *)

1

thay vì type="string", hãy xác định trường type="text_general" (như được định nghĩa trong schema.xml mặc định). Trên tài sản của nó là ignore case=true

-2

Làm thế nào để bạn làm cho phân biệt chữ hoa chữ thường sử dụng lược đồ động (hoặc lược đồ điều khiển dữ liệu)? Bộ sưu tập đã được tạo như: su - solr -c "/opt/solr/bin/solr create -c Mock2 -n data_driven_schema_configs"

Các vấn đề liên quan