문제

유스 케이스

사용자가 내 웹 사이트로 가면 검색 상자에 직면하게됩니다. 계획 텍스트를 사용하여 결과를 검색 할 수 있습니다. ".net Questions", "닫힌 질문", ".net 및 java"등 .. 검색은 약간 다르게 작동하므로 데이터베이스 스키마가 직선 풀 텍스트 검색. 따라서 ".NET 질문"은 .NET 답변과 달리 .NET 질문을 검색합니다 (아마도 사례에 적용 할 수 없을 것입니다. 질문은 .NET 및 Java와 관련된 질문을 반환합니다.

문제

나는 단어에 너무 익숙하지 않지만 기본적으로 SQL Driven Search에 키워드를 만들고 싶습니다. 데이터베이스의 스키마를 알고 있으며 데이터베이스를 데이터베이스에 데이터를 마실 수도 있습니다. 나는 이것을 구현하기 전에 이미 존재하는 현재 접근법을 알고 싶습니다. 이 질문은 명시된 문제에 대한 좋은 디자인이 무엇인지에 대한 것 같습니다.

제안

지금까지 제안 된 솔루션은 다음과 같습니다

  1. 입력을 청소하십시오. 특수 문자 만 제거하십시오
  2. 입력을 데이터 청크로 구문 분석하십시오. "C# java"의 입력을 C#에 끊고 Java는 "C# Java 'Questions"와 같은 특수 사례를'C# Java '및 "Questions"와 같은 특수 사례를 처리합니다.
  3. 입력에서 트리를 구축하십시오
  4. 데이터를 메타 데이터에 바인딩하십시오. 따라서 닫힌 질문과 같은 것들을 변환하고이를 테이블의 기둥 열로 연관시킵니다.
  5. 트리를 SQL 쿼리로 변환하십시오.

생각/제안/링크?

도움이 되었습니까?

해결책

나는 사건과 제품이 나타나는 스키마를 기반으로 키워드를 가중치로 만드는 "단일 검색"이있는 디지털 음악 스토어를 실행합니다. "아티스트", "제목"또는 "게시자"와 같은 다른 열로.

제품은 앨범 및 재생 목록과 관련이 있지만 더 간단한 설명을 위해 제품 키워드의 인덱싱 및 쿼리에 대해서만 자세히 설명합니다.

데이터베이스 스키마

Keywords 표 - 각 레코드에 대한 다음 데이터와 함께 검색 할 수있는 모든 단어에 대한 가중 테이블 (어딘가에 참조).

  • 키워드 ID (단어가 아님),
  • 단어 자체,
  • 단어의 Soundex 알파 값
  • 무게

ProductKeywords 테이블 - 각 레코드에 대한 다음 데이터가있는 제품 필드 (또는 열)에서 참조 한 모든 키워드에 대한 가중 테이블.

  • 제품 ID,
  • 키워드 ID,
  • 무게

키워드 가중치

가중치 값은 단어가 얼마나 자주 발생하는지를 나타냅니다. 무게가 낮은 키워드를 일치시키는 것은 "더 독특하고"검색 될 가능성이 높습니다. 이런 식으로, 종종 발생하는 단어는 자동으로 "다운 가중"입니다. "The", "A"또는 "I". 그러나 인덱싱 전에 일반적인 단어의 원자 발생을 제거하는 것이 가장 좋습니다.

가중치를 위해 정수를 사용했지만 소수점 값을 사용하면 약간 느리게 정렬 할 수 있습니다.

인덱싱

제품 필드가 업데이트 될 때마다 (예 : 아티스트 또는 제목 (자주 발생하지 않는 경우) 데이터베이스는 트랜잭션 내부와 같은 제품의 키워드를 다시 표시합니다.

  1. 모든 제품 키워드는 더 이상 참조되지 않으면 분리 및 삭제됩니다.
  2. 각 인덱스 된 필드 (예 : 아티스트) 값은 전체의 키워드로 저장/검색되며 ProductKeywords 직접 일치 테이블.
  3. 그런 다음 키워드 가중치는 필드의 중요성에 의존하는 값으로 증가합니다. 현장의 중요성에 따라 웨이트를 추가하고 감격 할 수 있습니다. 아티스트가 타이틀보다 더 중요한 경우 1 또는 2에서 1 또는 2를 빼십시오. ProductKeyword 체중 조정.
  4. 각 인덱스 된 필드 값은 비 alphanumeric 문자로 제거되어 별도의 단어 그룹으로 나뉩니다. "Billy Joel"은 "Billy"와 "Joel"이됩니다.
  5. 각 필드 값에 대한 각 별도의 단어 그룹은 SoundExed 및 Keyword로 저장/검색되며 2 단계와 동일한 방식으로 제품과 관련되어 있습니다. 키워드가 이미 제품과 연결된 경우 무게가 간단하게 조정됩니다.

쿼리

  1. 입력 쿼리 검색 문자열을 전체적으로 가져 와서 직접 일치 키워드를 찾으십시오. 키워드 무게 (ProductKeyword 가중치와 다름)와 함께 메모리 내 테이블에서 키워드의 모든 ProductKeywords를 검색하십시오.
  2. 모든 비 성격 문자를 제거하고 쿼리를 키워드로 분할하십시오. 기존의 모든 키워드를 검색합니다 (소수만 일치합니다). ProductKeywords는 Keyword Weight와 함께 메모리 인 테이블에 일치하는 키워드에 제품 키워드에 가입하십시오.
  3. 2 단계를 반복하지만 대신 Soundex 값을 사용하여 무게를 덜 관련성있게 조정하십시오.
  4. 검색된 ProductKeywords를 관련 제품에 가입하고 각 제품의 판매를 검색합니다. 이는 인기의 척도입니다.
  5. 키워드 무게, 제품 키워드 가중치 및 판매별로 결과를 정렬하십시오. 최종 합계/정렬 및/또는 가중치는 구현에 따라 다릅니다.
  6. 결과를 제한하고 제품 검색 결과를 클라이언트에 반환합니다.

다른 팁

당신이 찾고있는 것은입니다 자연어 처리. 이상하게도 이것 사용된 무료로 포함됩니다 영어 쿼리 SQL Server 2000 및 사전에서. 하지만 지금 사라졌습니다

다른 출처는 다음과 같습니다.

이 개념은 테이블, 열, 관계 등에 대한 메타 데이터 사전 매핑 단어 및 영어 문장 파서를 결합하여 영어 문장 (또는 일부 키워드)을 실제 쿼리로 변환합니다.

어떤 사람들은 정말 멋진 데모에 대한 음성 인식을 가진 사용자 영어 쿼리조차도 분노에 사용 된 것을 보지 못했습니다!

SQL Server를 사용하는 경우 간단히 사용할 수 있습니다. 전체 텍스트 검색 문제를 해결하도록 특별히 설계된 기능.

하이브리드 접근법을 사용하고 전체 텍스트 검색 결과를 가져 와서 #4의 메타 데이터를 기반으로 필터링 할 수 있습니다. 보다 지능적인 것을 위해서는 검색 후 사용자가 클릭 한 링크를 추적하고 의사 결정 트리의 주요 검색어로 해당 선택을 저장하여 간단한 감독 학습 솔루션을 만들 수 있습니다. 그런 다음이 의사 결정 트리에서 검색이 채굴됩니다

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top