2009-06-10 38 views
6

Tôi đang làm việc trên API tìm kiếm của công ty sử dụng Lucene. chỉ số công ty Lucene tôi đã có 2 công ty: 1.Abigail Adams Quốc Bancorp, Inc. 2.National BancorpTìm đối sánh chính xác bằng API tìm kiếm Lucene

Nếu các loại dùng trong Quốc Bancorp, sau đó chỉ công ty # 2 (. Tức là quốc gia Bancorp) nên trả về và không # 1 ..... tức là. chỉ các trận đấu chính xác phải được trả lại. Làm cách nào để đạt được chức năng này?

Cảm ơn bạn đã đọc.

+0

Người tìm kiếm trong tương lai: nếu bạn chỉ đang tìm kiếm một dịch vụ được lập chỉ mục lucene, câu trả lời của Somonath Sabat mà không có upvotes dường như đúng trong ít nhất một trường hợp - đặt cụm từ trong dấu ngoặc kép. Xác minh chống lại musicbrainz. –

Trả lời

11

Bạn có thể sử dụng KeywordAnalyzer để lập chỉ mục và tìm kiếm trên trường này. Trình phân tích từ khóa sẽ chỉ tạo một mã thông báo cho toàn bộ chuỗi.

+0

Bạn có thể trả lời câu hỏi này không? http://stackoverflow.com/questions/899542/problem-using-same-instance-of-indexsearcher-for-multiple-requests –

1

Bạn có thể xem xét lại các yêu cầu của mình, tùy thuộc vào việc tôi có hiểu đúng câu hỏi của bạn hay không. Làm ơn đi với tôi nếu tôi hiểu lầm bạn.

Chỉ cần một chút thức ăn cho các tư tưởng:

  • Nếu bạn chỉ muốn chính xác trận đấu trở lại, thì tại sao bạn đang tìm kiếm ở nơi đầu tiên?

  • Bạn có chắc chắn rằng người dùng mong đợi đối sánh chính xác không? Tôi thường tìm kiếm giả định rằng công cụ tìm kiếm sẽ chứa các từ bị thiếu.

  • Giả sử người dùng đã tìm kiếm Ngân hàng Quốc gia nhưng Ngân hàng Quốc gia không còn trong chỉ mục của bạn nữa. Bạn vẫn muốn Abigail Adams National Bancorp, Inc để được loại trừ khỏi kết quả chỉ đơn giản bởi vì nó không phải là một kết hợp chính xác?

Trong ánh sáng này, tôi sẽ đề nghị bạn tiếp tục trình bày tất cả trận đấu càng tốt (chính xác hay không) cho người sử dụng và để họ quyết định cho bản thân mà là thích hợp nhất cho họ. Tôi nói điều này đơn giản chỉ vì bạn có thể không suy nghĩ giống như tất cả người dùng của mình. Lucene sẽ chăm sóc để đảm bảo các trận đấu gần nhất xếp hạng cao nhất trong kết quả, giúp họ lựa chọn nhanh hơn.

1

Đây là thứ có thể đảm bảo việc sử dụng bộ lọc ván lợp. Bộ lọc này nhóm nhiều từ lại với nhau. Ví dụ, Abigail Adams National Bancorp với một ShingleFilter của 3 thẻ sẽ sản xuất (giả định một WhitespaceAnalyzer đơn giản) [Abigail], [Abigail Adams], [Abigail Adams National], [Adams National Bancorp], [Adams National], [Adams] , [National], [National Bancorp] và [Bancorp].

Nếu người dùng truy vấn cho National Bancorp, bạn sẽ nhận được trận đấu chính xác trên National Bancorp và trận đấu chính xác thấp hơn trên Abigail Adams National Bancorp (số điểm thấp hơn vì thẻ này có nhiều thẻ hơn trong trường, do đó hạ idf). Tôi nghĩ có thể trả lại cả hai tài liệu trên một truy vấn như vậy.

Bạn cũng có thể muốn áp dụng bộ lọc ván lợp tại thời điểm truy vấn, tùy thuộc vào trường hợp sử dụng.

1

Tôi googled rất nhiều mà không có sự giúp đỡ cho cùng một vấn đề. Sau khi gãi đầu tôi một lúc, tôi tìm ra giải pháp. Tìm kiếm chuỗi trong dấu ngoặc kép, điều đó sẽ giải quyết vấn đề của bạn.

Bancorp quốc gia sẽ trả về cả # 1 và # 2 nhưng "National Bancorp" sẽ chỉ trả về # 2.

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