2011-12-24 2 views
4

저는 소셜 네트워크를 검색하여 이름, 연령대, 도시, 국가 및 성별로 사람을 검색 할 수있는 기능을 발견했습니다. 흥미로운 것은이 모든 정보가 공간으로 구분 된 하나의 텍스트 상자에 삽입 될 수 있다는 것입니다. 그런 다음 검색 엔진은 매우 정확하게 구문을 분석하고 결과 목록을 반환합니다.하나의 입력으로 스마트 검색

한편으로는 공간별로 쿼리를 분할하고 발생하는 모든 관련 테이블을 검색하십시오. 여태까지는 그런대로 잘됐다. 그러나

  1. 그들을 입력 할 수 있습니다 다른를 무료로 텍스트와 같이 이름이 2 개 이상의 단어와 사용자 인 도시가 있습니다. 2 개 이상의 단어
  2. 는 이름이있다

질문 : 우리는 같은 방법으로 쿼리를 분할 할 수

, 우리는 확실히의 부분이 어디를 검색해야하는 알고 있는가? 즉, 사용자 테이블의 도시 이름, 도시 테이블의 국가 별 이름 등? 내가 지금까지했던 어떤

입니다 : 모든 사용자와

  1. 채우기 사용자 데이터 소스
  2. 확인 쿼리
  3. 경우에 나라에서 나라 tableexist는 사용자가 가지고있는 데이터 소스를 필터링 존재하는 경우 해당 국가에만 해당
  4. 쿼리에 도시 테이블의 내용이 있는지 확인하십시오.
  5. 해당되는 경우 해당 도시의 사용자 만 필터 데이터를 입력하십시오.

등 각 표에 대해 일치하는 항목이 발견 될 때마다 검색어에서 찾은 부분을 제거하고 가장 무료 매개 변수 인 의 이름을으로 남겨 둡니다.

사용자가 정확하게 도시/국가 등이 내 데이터베이스 에 어떻게 쓰여 있는지 알았 으면 좋겠지 만 현실은 사용자가 도시의 일부를 입력하거나 도시를 잘못 입력 할 수 있다는 것입니다.

만약 내가 올바른 방향으로 나아 갔는지 나는 모른다. 시작 지점 일뿐입니다 ...

추신 : 프로그래밍 흐름이 실제로 미터가 아니기 때문에 알고리즘 흐름이 필요합니다. 어떤 아이디어 나 안내도 환영합니다.

감사

답변

0

쿼리의 이러한 종류의 relational databases 좋지 않다. 이 필수가 아닌 경우, 나는 이러한 타입의 처리를하는 부분은 '이겼다 받아들이 생각 당신은 내가 여기 제로 경험이 Lucene.Net(c#) 또는 Lucene(java)

0

사용하는 생각,하지만 난이 natural language processing

것 같다 항상 옳다. 그로부터 당신의 목표는 당신이 어떤 가정을 할 자신이 있다고 느끼는 경우를 확인하는 것입니다.예를 들어

,

사용자가 뉴욕시제인 미상를 검색 할 경우, 그들은 jane new york city doe로 입력 할 것, 이름과 도시는 항상 연속 그룹이 될 것입니다. 각 그룹의 길이는 모르지만 시도 할 수있는 조합은 한정되어 있습니다. jane doe new york city이 있으면 인접한 그룹의 조합을 반복 할 수 있습니다.

scoreAsName('jane') 
scoreAsName('jane doe') 
scoreAsName('jane doe new') 

... 등등 ... 및 scoreAsCity에 대해 동일 않습니다.

둘 모두에 대해 명확한 고득점 조합이 있어야합니다. 가장 좋은 선택은 가장 높은 합계를 산출하는 이름과 도시 점수의 조합입니다. 아마도 데이터베이스 매치를 기반으로하는 스코어링 알고리즘을 만들어야 할 것이지만, 로컬 이름 매치의 스코어를 높이는 것과 같은 보조 입력을 사용할 수도 있습니다.

매우 흥미로운 주제입니다.

관련 문제