Trong Lucene, chúng ta có thể sử dụng TermQuery để tìm kiếm một văn bản với một trường. Tôi tự hỏi làm thế nào để tìm kiếm một từ khóa trên một loạt các lĩnh vực hoặc tất cả các lĩnh vực tìm kiếm?Cách tìm kiếm trên tất cả các trường?
Trả lời
Hai phương pháp tiếp cận
1) cách tiếp cận Index thời gian: Sử dụng một-tất cả bắt lĩnh vực . Điều này không là gì ngoài việc thêm tất cả văn bản từ tất cả các trường (tổng văn bản từ tài liệu đầu vào của bạn) và vị trí dẫn đến văn bản lớn trong một trường đơn lẻ. Bạn đã thêm một trường bổ sung trong khi lập chỉ mục hoạt động như một trường nhận toàn bộ.
2) Phương pháp tiếp cận thời gian tìm kiếm: Sử dụng BooleanQuery để kết hợp nhiều truy vấn, ví dụ như các cá thể TermQuery. Có thể tạo nhiều truy vấn đó để bao gồm tất cả các trường mục tiêu.
Example kiểm tra ở cuối bài viết.
Sử dụng phương pháp 2 nếu bạn biết danh sách trường mục tiêu khi chạy. Nếu không, bạn phải sử dụng cách tiếp cận thứ nhất.
Cách tiếp cận khác, không yêu cầu lập chỉ mục bất cứ điều gì nhiều hơn những gì bạn đã có, cũng như không kết hợp các truy vấn khác nhau, đang sử dụng MultiFieldQueryParser
.
Bạn có thể cung cấp danh sách các trường mà bạn muốn tìm kiếm và truy vấn của bạn, đó là tất cả.
MultiFieldQueryParser queryParser = new MultiFieldQueryParser(
Version.LUCENE_41,
new String[]{"title", "content", "description"},
new StandardAnalyzer(Version.LUCENE_41));
Query query = queryParser.parse("here goes your query");
Đây là cách tôi làm với thư viện gốc lucene được viết bằng Java. Tôi không chắc liệu MultiFieldQueryParser
cũng có sẵn trong lucene.net hay không.
Một cách tiếp cận dễ dàng khác để tìm kiếm trên tất cả các trường sử dụng "MultifieldQueryParser" đang sử dụng IndexReader.FieldOption.ALL trong truy vấn của bạn.
Đây là ví dụ trong C#.
Directory directory = FSDirectory.Open(new DirectoryInfo(HostingEnvironment.MapPath(VirtualIndexPath)));
//get analyzer
Analyzer analyzer = new StandardAnalyzer(Version.LUCENE_29);
//get index reader and searcher
IndexReader indexReader__1 = IndexReader.Open(directory, true);
Searcher indexSearch = new IndexSearcher(indexReader__1);
//add all possible fileds in multifieldqueryparser using indexreader getFieldNames method
dynamic queryParser = new MultiFieldQueryParser(Version.LUCENE_29, indexReader__1.GetFieldNames(IndexReader.FieldOption.ALL).ToArray(), analyzer);
dynamic query = queryParser.Parse(Criteria);
TopDocs resultDocs = null;
//perform search
resultDocs = indexSearch.Search(query, indexReader__1.MaxDoc());
dynamic hits = resultDocs.scoreDocs;
click here kiểm tra câu trả lời dể qua tôi để cùng quesiton trong vb.net
Tôi không thấy điểm sử dụng cách gõ vịt ở đây (nghĩa là từ khóa 'động'). Có lẽ bạn muốn sử dụng loại interence với 'var'? –
- 1. Làm cách nào để xóa tất cả kiểu dáng trường tìm kiếm Webkit mặc định?
- 2. XCode - văn bản tìm kiếm trong tất cả các tệp
- 3. Git tìm kiếm tất cả các khác biệt
- 4. Tìm kiếm tất cả các bảng sử dụng MySQL Workbench
- 5. Angularjs: Tìm tất cả các trường hợp của chỉ thị
- 6. Tìm tất cả các bản ghi có trường phi nil?
- 7. Tìm tất cả các trường varchar() trong máy chủ sql?
- 8. Làm cách nào để truy xuất tất cả các trường có thể áp dụng cho tìm kiếm Solr
- 9. vim: tìm kiếm thay thế trên tất cả các bộ đệm ghi
- 10. Tìm kiếm tất cả các bảng, tất cả các cột cho một giá trị cụ thể SQL Server
- 11. tìm kiếm sql trên các trường có chứa dấu phụ
- 12. Cách tìm kiếm tất cả các trường văn bản trong DB cho một số chuỗi con bằng T-SQL
- 13. Tìm danh sách tất cả các ứng dụng Android trên thị trường
- 14. Cách tìm kiếm trong tất cả các tệp của dự án trong IntelliJ Idea?
- 15. Cách bỏ qua ghi đè của phương thức khi tìm kiếm tất cả các tham chiếu
- 16. Làm thế nào tôi có thể tìm kiếm tất cả các trường trong SOLR có chứa các từ khóa,.?
- 17. ExtJs4 cách tắt tất cả các trường và tất cả các nút trên bảng điều khiển đệ quy
- 18. Boost.MultiIndex: tìm kiếm các phần tử sử dụng nhiều trường
- 19. Cách tìm kiếm tất cả các tệp đang mở trong Eclipse?
- 20. Tìm kiếm solitaire Sunspot, cách trả lại tất cả các bản ghi cùng một lúc?
- 21. Làm cách nào để xóa tất cả các mục nhập trong hộp Tìm kiếm?
- 22. Tìm tất cả các tham chiếu trên Eclipse
- 23. Tìm tất cả các tệp khớp với 'tên' trên hệ thống Linux và tìm kiếm chúng với 'văn bản'
- 24. Sử dụng git, làm cách nào tôi có thể tìm kiếm chuỗi trên tất cả các nhánh?
- 25. Truy vấn SQL để tìm kiếm lược đồ của tất cả các bảng
- 26. Tìm kiếm GIT từ xa tất cả các chi nhánh cho nội dung tập tin?
- 27. nhận tất cả các trường từ DynamicForm
- 28. Có thể tìm kiếm mặc dù tất cả các bản ghi xcodes
- 29. TCL: Tìm kiếm đệ quy các thư mục con để nguồn tất cả các tệp .tcl
- 30. Tìm tất cả các nút văn bản
Cám ơn tốt giải thích bức tranh lớn. Cách tiếp cận đầu tiên là những gì tôi sử dụng khi lưu trữ các loại sản phẩm khác nhau trong cùng một chỉ mục, ví dụ: Máy in so với Màn hình, nơi có các trường khác nhau cho mỗi tài liệu nhưng tôi muốn sử dụng tìm kiếm "toàn văn" bằng chuỗi tìm kiếm đơn giản và mang lại tất cả sản phẩm phù hợp. – nothingisnecessary