Tìm hiểu về Apache Solr ( phần 2)
Bạn đưa rất nhiều thông tin để lưu vào cơ sở dữ liệu, sau đó bạn muốn tìm những mẩu thông tin trong số chúng một cách chọn lọc, chắt lọc, và solr là một công cụ hỗ trợ hữu ích cho bạn làm được điều đó. Phần mà bạn muốn feed tất cả các thông tin được gọi ra là indexing hoặc updating . Khi bạn đưa ...
Bạn đưa rất nhiều thông tin để lưu vào cơ sở dữ liệu, sau đó bạn muốn tìm những mẩu thông tin trong số chúng một cách chọn lọc, chắt lọc, và solr là một công cụ hỗ trợ hữu ích cho bạn làm được điều đó. Phần mà bạn muốn feed tất cả các thông tin được gọi ra là indexing hoặc updating. Khi bạn đưa ra một câu hỏi, nó được gọi là query.
Một cách đơn giản để hiểu về cách vận hành của solr như một cuốn sách được bao gồm phần mục lục sẽ chắt lọc toàn bộ thông tin chính của chuỗi thông tin, và đưa ra số trang dẫn đến thông tin đó. Bằng cách đó thì ta có thể nhanh chóng tìm được thông tin mà mà bạn muốn tìm kiếm. Bạn liệt kê các thành phần, số lượng trang, từ khóa cho thông tin mà bạn muốn thêm vào trong cơ sở dữ liệu thì thông tin sau này sẽ tìm kiếm được nhanh chóng và dễ dàng hơn với solr
Solr cho phép bạn xây dựng một index với nhiều lĩnh vực, kiểu loại khác nhau. Ví dụ một tập dữ liệu về các món ăn như món âu, á món chiên, ... và solr đưa vào index thời gian hoàn thành món, hay số lượng nguyên liệu, ...
Schema là nơi bạn xây dựng các dữ kiện đầu vào cho solr
Vậy làm thế nào để solr nhận ra được các từ, key word
Đơn vị thông tin cơ bản của solr là một document, nó là một tập các dữ liệu mô tả một vấn đề nào đó. Một document sẽ chứa các thông tin dữ liệu nhỏ ví dụ như cuốn sách dậy nấu ăn trên sẽ chứa hướng dẫn về món ăn, thời gian chuẩn bị, thời gian nấu, và các công cụ cần thiết, ... Một document về con người sẽ chứa tiểu sử, màu sắc ưa thích, kích cỡ giày, chiều cao, cân nặng của người đó. Một document về cuốn sách nào đó thì chứa thông tin về tiêu đề, tác giả, năm xuất bản, số trang, ... và việc định nghĩa các trường trong solr chính là các thông tin vừa nêu trong ví dụ. Khi bạn thêm một dữ liệu bất kì vào trong solr, thì dữ liệu đó sẽ được đánh index, và khi bạn truy vấn thì dựa vào index đó solr sẽ trả ra kết quả tìm kiếm một cách nhanh chóng cho bạn
Định nghĩa Field Type và các properties
Một Field Type được định nghĩa là bao gồm các thông tin như sau:
- Tên của loại trường đó (bắt buộc) -Tên của class (bắt buộc) -Với kiểu trường là TextField, mô tả các lĩnh vực phân tích cho kiểu trường đó -Thuộc tính của kiểu trường đó - tùy thuộc vào class mà một số properties có thể bắt buộc phải có.
Kiểu trường định nghĩa trong schema.xml
Kiểu trường được định nghĩa trong schema.xml, với các kiểu thành phần, mỗi một kiểu trường thì được định nghĩa giữa fieldType. Dưới đây là một ví dụ về kiểu trường định nghĩa cho type được gọi với text_general
Dòng đầu tiên có chứa tên của loại trường, text_general và tên của các lớp thực hiện sold.TextField Các class thực hiện có trách nhiệm đamt bảo các lĩnh vực được xử lý một cách chính xác. Tên class trong schema.xml, được bắt đầu với "solr." nó được gọi tắt từ các thư viện org.apache.solr.schema hoặc org.apache.solr.analysis. Vì vậy, solr.TextField thực ra là gọi từ org.apache.solr.schema.TextField.
Thuộc tính của kiểu trường
Các thuộc tính của kiểu trường xác định hầu hết các hành vi của một loại trường, nhưng thuộc tính tùy chọn cũng có thể được định nghĩa.Ví dụ, các định nghĩa sau của một loại trường date định nghĩa 2 thuộc tính sortMissingLast và omitNorms.
<fieldType name="date" class="solr.TrieDateField" sortMissingLast="true" omitNorms="true"/>
Các thuộc tính có thể thuộc một trong những thuộc tính sau:
-Thuộc tính riêng của kiểu trường trong class -General PropertiesSolr supports cho tất cả các kiểu trường này -Field Default Properties Có thể được chỉ định vào loại trường sẽ được kế thừa thay thế cho các trường mặc định.
General Properties
Property | Description | Values |
---|---|---|
autoGeneratePhraseQueries | Đối với các trường cơ bản, nếu đúng thì Solr tự động tạo ra các truy vấn Solr phrases (truy vấn cụm) với các terms liền kề. Nếu sai, các terms phải được đặt trong dấu ngoặc kép để xử lý như các pharse. | true or false |
class | Tên class mà được sử dụng để lưu trữ các dữ liệu và chỉ số cho loại này. Lưu ý rằng bạn có thể thêm tiền tố đi kèm "solr." và Solr sẽ tự động tìm ra những gói để tìm kiếm các lớp - vì vậy solr.TextField sẽ làm việc. Nếu bạn đang sử dụng class thứ 3, bạn sẽ cần phải tên class đầy đủ. Tương tự đầy đủ cho solr.TextField là org.apache.solr.schema.TextField | n/a |
docValuesFormat | Định nghĩa một DocValuesFormat để dùng cho các field của loại này. Điều này cần phải có schema-aware codec, chẳng hạn như SchemaCodecFactory được cấu hình trong solrconfig.xml. | n/a |
name | Tên của fieldType. Giá trị này được dùng để định nghĩa Field, trong các "type" attribute. Nó được khuyến khích là tên gồm 1 chữ và số hoặc ký tự gạch dưới và không bắt đầu bằng 1 chữ số. | |
positionIncrementGap | Dùng cho các fields đa trị, xác định khoảng cách giữa hoặc nhiều giá trị, nó ngăn chặn các giả mạo phrase được tìm thấy | integer |
PostingsFormat | Định nghĩa một PostingsFormat để sử dụng cho các fields của loại này. Điều này cần phải có schema-aware codec, chẳng hạn như SchemaCodecFactory được cấu hình trong solrconfig.xml. |
Field Default Properties
Property | Description | Values |
---|---|---|
docValues | Nếu đúng, giá trị của field này sẽ được đặt trong cấu trúc của cộtstructure | true or false |
indexed | Nếu đúng, giá trị của field này có thể được sử dụng trong các truy vấn lấy được documents phù hợp | true or false |
multiValued | Nếu đúng, chỉ ra rằng một document có thể chứa nhiều giá trị của kiểu field này | true or false |
omitNorms | Nếu đúng, sẽ bỏ qua các chỉ tiêu liên quan đến field này (điều này sẽ giảm bớt độ dài và bộ nhớ cho quá trình tìm kiếm). Mặc định là đúng cho tất cả loại field nguyên thủy (non-analyzed) , cũng như int, float, data, bool, và string. | true or false |
omitPositions | Tương tự như omitTermFreqAndPositions nhưng giữ lại thông tin tần suất của terms | true or false |
omitTermFreqAndPositions | Nếu đúng, bỏ qua tần số, vị trí, trọng tải từ các quảng cáo của của terms. Điều này cải thiện hiệu suất cho các trường không yêu cầu thông tin. Nó cũng giảm không gian lưu trữ cần thiết cho index. Truy vấn dựa trên vị trí đó được phát trên một field với tùy chọn là không tìm thấy documents. Mặc định thuộc tính này đúng cho tất cả các fields mà không phải là fields văn bản. | true or false |
required | Từ chối việc thêm field rỗng. Mặc định có giá trị là false. | true or false |
sortMissingFirst sortMissingLast | Điều khiển vị trí của documents khi lựa chọn field không có đại diện. Kể từ Solr 3.5, nó sẽ làm việc với tất cả các trường numeric, gồm cả trường Trie and date. | true or false |
stored | Nếu đúng, giá trị thực tế của trường sẽ có thể lấy được bằng truy vấn | true or false |
termVectors termPositions termOffsets | Những tùy chọn hướng dẫn solr duy trì đầy đủ các vector hạn cho mỗi document, tùy chọn bao gồm các vị trí và thông tin cho mỗi terms xuất hiện trong vectors. Điều này làm tăng tốc độ tìm các thông tin nổi bật và các function khác, nhưng mất một chi phí lớn về kích thước index. Nó không phải là điển hình dùng trong Solr | true or false |
Dynamic Fields
Dynamic Fiels cho phép Solr index đến Filds mà bạn đã không xác định rõ ràng. Điều này rất hữu ích vì chẳng may bạn quên định nghĩa một trường nào đó thì nó sẽ giúp ta cảnh báo. Dynamic Fiels còn làm cho dữ liệu tìm kiếm của bạn linh hoạt hơn khi bạn thêm mới cũng như cập nhật
Dynamic Fiels được quy định rõ trong thành phần của schema.xml, giống như Fields nó cũng có tên, loại tên và tùy chọn
<dynamicField name="*_i" type="int" indexed="true" stored="true"/>