2009-11-19 5 views
3

저는 전화 번호부 검색을 작성하고 있는데, 이는 여러 원격 소스를 쿼리 할 것입니다.하지만이 태스크에 어떻게 접근하는 것이 가장 좋은지 궁금합니다.여러 소스를 동시에 검색하는 가장 좋은 방법은 무엇입니까?

가장 쉬운 방법은 쿼리를 실행하고 원격 소스 쿼리 당 스레드를 시작하고 (최대 결과를 10으로 제한) 모든 스레드의 결과를 기다리고 목록을 총 10 개의 항목으로 집계하고 그들을 돌려 보내.

그러나 모든 소스가 10 개 이상의 결과를 반환하면 원격 소스 중 어느 것이 더 중요한지, 검색 결과를 검색해야합니다. 이것은 정확한 정보를 산출 할 수는 없지만 비효율적이며 확장이 잘되지 않습니다.

내가 사용할 수 있고 확장 할 수있는 상용 또는 오픈 소스 솔루션이 있습니까? 아니면 내가 놓친 유용한 알고리즘이 있습니까?

감사

답변

2

존, 내가 원하는 것은 federated search입니다. 나는 이것을위한 프레임 워크로 Solr을 확인해 보시기 바랍니다. 나는 Nick과 당신이 서로 다른 소스의 상대적 품질을 스스로 평가하고 병합 기능을 만들어야한다는 것에 동의한다. Solr에는 이것에 대한 인프라가 있습니다 (email thread 참조).

0

내가 준비 솔루션을 보지 못했다 솔직히 말해서, 그러나 이것은 우리 프로그래머가 존재하는 이유입니다 : 솔루션을 만드는 사람이 쉽게

내가하고자하는 방식의 availble :-)없는 경우 그것이 당신이 묘사하는 것과 유사합니까? 쓰레드 사용 - 웹 애플리케이션이라면 아약스는 속도와 유용성면에서 당신의 친구입니다. 데스크탑 애플리케이션 GUI 표현은 문제가 아닙니다.

어떤 소스가 신뢰성 측면에서 가장 좋은지를 판단하거나 추측 할 수없는 것처럼 들리지만, 결과는 &입니다. 따라서 즉시 최상의 결과를 얻을 수 있도록 프로그램을 설치해야합니다. 10 개의 데이터 소스와 10 개의 스레드가 있다고 가정 해 보겠습니다. 스레드를 시작하면 첫 번째 스레드가 결과> 0으로 돌아갈 때까지 기다립니다.이 스레드가 "마스터"결과가 될 것입니다. 다른 스레드가 반환 할 때 "마스터"결과와 비교하여 새로운 결과를 추가 할 수 있습니다. 고유 한 결과를 제공하려는 경우에는이를 피할 방법이 없습니다. 첫 번째 스레드가 생기 자마자 결과를 표시 할 수 있습니다. 새로운 결과가 나오면 즉시 화면을 업데이트 할 필요는 없지만 시간이 걸리면 사용자가 불안해 할 수 있습니다. 예를 들어 10 개가 넘는 경우 더 많은 결과를 얻을 수 있음을 나타내는 지표를 사용할 수 있습니다.

소스가 10 개 밖에없고 대기중인 소스 당 결과 수를 10 개로 제한하면 모든 프로그래밍 언어로 정렬하는 데 많은 시간이 걸리지 않습니다. . 또한 원격 소스를 사용할 수없는 경우 복구 할 수 있는지 확인하십시오. 예를 들어, 10 개의 모든 소스가 다시 표시되어 데이터를 표시 할 때까지 기다리는 중입니다. 소스 중 하나가 다운되면 오래 기다릴 수도 있습니다.

다른 접근법은 사용자에게 있습니다. 항공 요금 검색 사이트처럼 일종의 결과를 수집하고 분류하는 동안 몇 초가 필요합니다. Kayak.com의 구현이 정말 마음에 듭니다. 다른 사이트와 달리 뭔가를하고있는 것처럼 느껴집니다.

희망이 있습니다.

관련 문제