cuốn sách gpt4 ai đã làm

java - 多字段子集合中的 Hibernate 搜索/lucene 搜索

In lại Tác giả: Taklimakan Thời gian cập nhật: 2023-11-02 20:02:21 33 4
mua khóa gpt4 Nike

Tôi đang sử dụng Tìm kiếm Hibernate trong ứng dụng của mình. Một trong các bộ sưu tập phụ được ánh xạ tới IndexedEmbedded. Đối tượng con có hai trường, một trường là id và trường kia là ngày (sử dụng độ phân giải ngày đến mili giây). Khi tôi tìm kiếm id=1 (hoặc một số giá trị) và ngày bằng giá trị khác, tôi nhận được kết quả cho tất cả các trường hợp khớp thứ nhất và thứ hai. Tôi chỉ muốn nhận các bản ghi trong đó cả hai trường khớp với cùng một đứa trẻ, nhưng tôi nhận được các bản ghi trùng khớp ở những đứa trẻ khác nhau, dẫn đến kết quả cao hơn. Đây là đoạn mã

Lớp chính là Người dùng

@Đã lập chỉ mục
lớp công khai Người dùng {...

@IndexedEmbedded(tiền tố = "score_")
Danh sách công khai getScores() {...}

Mức điểm là @index điểm khóa học mở {...

@Id
@DocumentId
Số nguyên công khai getId() {...}

@Cánh đồng
giá trị số nguyên công khai

@Field(analyze = Phân tích.NO, indexNullAs="_null_")
@DateBridge(độ phân giải = Độ phân giải.MILLISECOND)
Ngày công khai getScoreTime()

Trong mã tìm kiếm của tôi, tôi đang làm như sau

QueryBuilder queryBuilder = fullTextSession.getSearchFactory().buildQueryBuilder().forEntity(User.class).get();

Truy vấn con BooleanQuery = BooleanQuery mới();
subQuery.add(queryBuilder.keyword().onField("score_id").matching(20).createQuery(), BooleanClause.Occur.MUST);
subQuery.add(queryBuilder.keyword().onField("score_scoreTime").ignoreFieldBridge().matching("_null").createQuery(), BooleanClause.Occur.MUST);

Trường giá trị tìm kiếm (thay vì ScoreTime) có hành vi tương tự. Nếu tôi tìm kiếm bất kỳ trường nào riêng lẻ, tôi sẽ nhận được kết quả chính xác.

Có gợi ý gì không?

câu trả lời hay nhất

Bạn đã thử cú pháp này chưa:

// tìm người dùng có id là 1 và createDate lớn hơn LastMonth
Ngày tháng cuối cùng = ...;
QueryBuilder userQB = searchFactory.buildQueryBuilder().forEntity( User.class ).get();

Truy vấn luceneQuery = userQB
.bool()
.must( userQB.keyword().onField("id").matching("1").createQuery() )
.must( userQB.range().onField("creationDate").above(lastMonth)
.createQuery() )
.createQuery();

Về java - Tìm kiếm Hibernate/tìm kiếm lucene trong bộ sưu tập con đa trường, chúng tôi đã tìm thấy một câu hỏi tương tự trên Stack Overflow: https://stackoverflow.com/questions/27285442/

33 4 0
Chứng chỉ ICP Bắc Kinh số 000000
Hợp tác quảng cáo: 1813099741@qq.com 6ren.com
Xem sitemap của VNExpress