Tôi muốn tìm kiếm chỉ mục của mình trên hai trường có tên là "a" và "b". Tôi được cung cấp các tìm kiếm như Freud -- theories of psychology
và tôi muốn thực hiện truy vấn sau:Làm cách nào để kết hợp hai truy vấn Lucene bằng OR?
(a="Freud" AND b="theories of psychology") OR (b="Freud" AND a="theories of psychology")
Làm cách nào để thực hiện việc này? Cho đến nay tôi có Lucene xây dựng hai nửa (firstHalf
và secondHalf
) sử dụng MultiFieldQueryParser
, sau đó tôi đã kết hợp chúng với
BooleanQuery combined = new BooleanQuery();
combined.add(firstHalf, BooleanClause.Occur.SHOULD);
combined.add(secondHalf, BooleanClause.Occur.SHOULD);
Nhưng combined
cho phép kết quả được trả về nơi chỉ có "lý thuyết" được tìm thấy và không "tâm lý" , nơi tôi chắc chắn muốn cả hai điều khoản. Có vẻ như Lucene đang tách "lý thuyết tâm lý học" thành ba từ và kết hợp chúng với OR. Làm thế nào để ngăn chặn điều này?
firstHalf
trông giống như:
Query firstHalf = MultiFieldQueryParser.parse(Version.LUCENE_33,
new String[]{"Freud", "theories of psychology"},
new String[]{"a", "b"},
new BooleanClause.Occur[]{BooleanClause.Occur.MUST, BooleanClause.Occur.MUST},
analyzer);
nơi analyzer
chỉ là một đối tượng StandardAnalyzer
.
Được chỉ nói rằng Lucene không hỗ trợ chuỗi Boolean như thế này, và rằng NÊN = HOẶC!. Trong trường hợp đó, _Lucene trong Action_ 2nd Edition là sai trên trang 95. :) Vì vậy, bây giờ tôi biết _why_ truy vấn của tôi bị hỏng, chỉ không biết làm thế nào để sửa chữa nó vẫn còn. – dmn
Bạn có chắc chắn truy vấn là chính xác không? Truy vấn 'lý thuyết của tâm lý học 'có nghĩa là ít nhất một trong ba từ phải xảy ra ở đâu đó, nhưng không có từ nào trong số đó là từ bắt buộc. –
@KaiChan Nope, tôi đã phải sửa đổi điều này để đặt hạn chế đó. Tôi nghĩ rằng tôi đã nhận nó mặc dù. :) – dmn