2013-09-01 34 views
5

Cho đến Lucene phiên bản 3.9, chúng tôi có thể chỉ định lập chỉ mục hoặc không lập chỉ mục một trường bằng cách sử dụng FIELD.INDEX.NO hoặc FIELD.INDEX.ANALYZED v.v. Nhưng trong lucene 4.0 không có constructor có sẵn, trong đó chúng ta có thể định nghĩa điều này. Làm thế nào để chúng tôi kiểm soát lập chỉ mục trong phiên bản này?Cách kiểm soát Lập chỉ mục trường trong lucene 4.0

Ý tôi là nếu tôi muốn một trường "tên" được lưu trữ trong chỉ mục nhưng không muốn lập chỉ mục, thì làm cách nào tôi có thể làm điều đó trong lucene 4.0?

Trả lời

13

Các nhà xây dựng tham gia Field.Index đối số có sẵn nhưng không được sử dụng trong phiên bản 4.0 và không nên sử dụng. Thay vào đó, bạn nên tìm đến các lớp con của Field để kiểm soát cách một trường được lập chỉ mục.

  • StringField là trường được phân tích không được phân tích chuẩn. Trường được lập chỉ mục là một mã thông báo duy nhất. Đó là những điều thích hợp như số nhận dạng, mà bạn chỉ cần tìm kiếm các kết quả khớp chính xác.

  • TextField là trường được phân tích chuẩn (và, tất nhiên, được lập chỉ mục), cho nội dung văn bản. Nó là một lựa chọn thích hợp cho việc tìm kiếm toàn văn.

  • StoredField là trường được lưu trữ không được lập chỉ mục nào cả (và do đó, không thể tìm kiếm được).

Trừ StoredField, mỗi người trong số chúng có thể được thông qua một giá trị Field.Store như một đối số nhà xây dựng, tương tự như Lucene 3.6.

Để biết thêm thông tin về sự thay đổi này, hãy nhìn vào các Lucene Migration Guide, đặc biệt là phần có tiêu đề: "IndexableFieldType Tách biệt với trường hợp Dòng"

+0

Cảm ơn cho câu trả lời. Nó rất hữu ích. Một điều nữa chúng ta có thể làm là tạo một FieldType mới và thiết lập các yêu cầu của chúng ta bằng cách sử dụng các phương thức có sẵn, setIndexed(), setStored() vv Và sau đó chúng ta có thể truyền đối tượng fieldtype này tới hàm tạo trường. –

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