2009-10-28 2 views
4

전자 메일/지원 티켓 데이터베이스 (C#)의 전체 텍스트 검색 양식을 만들어야하는데이 방법에 대한 조언과 기사를 찾고 있습니다. 특히 다음과 같은 고전적인 전체 텍스트 검색 문제에 접근하는 방법을 알고 싶습니다.전체 텍스트 검색 양식 구현을위한 도움말 및 조언

  • "큰 머리"를 입력하고 문서에 "큰" 털이 머리 ", 검색에서 문서가 반환되는지 확인합니다.
  • 관련성을 기준으로 결과 정렬. 예를 들어, 디스플레이 경기를 베팅하는 방법
  • 강조 일치하는 용어

내가 전체 텍스트 검색, 난 그냥 만드는 방법에 대한 간단한 기사와 조언을 찾고 있어요 자체가 상당히 거대한 주제 영역임을 알고 적어도 약간 유용하고 쓸모있는 것.

전 Lucene.Net과 같은 것을 사용했습니다. 분명히 일종의 전체 텍스트 색인이 필요할 것입니다. 어려운 점은 Lucene이 반환하는 문서 목록을 가져 와서 유용한 방식으로 표시하는 것입니다.

UPDATE : 내가 무슨 뜻인지 약간 명확히 할 - 모든 예를 들어, 매우 유사한 기능을 수행 일반적인 전체 텍스트 검색 양식의 수백이있다 :

  • 각 검색 버튼을 모든 인터넷 포럼
  • 각각의 모든 위키
  • 윈도우/구글 데스크톱 검색의 검색 버튼
  • 구글

각 검색은 서로 다른 소스에서 정보를 가져 와서 서로 다른 방법 (HTML, Windows form 등 ...)을 사용하여 정보를 표시하지만 각각의 정보는 다양하고 복잡한 방법으로 동일한 문제를 해결합니다. 데스크탑 검색의 가능한 예외) 입력 데이터는 HTML 또는 텍스트와 같은 형식입니다.

나는 사용자에게 유용 할 수있는 방법으로 순위 검색 결과를 수행하는 방법에 대한 조언과 일반적인 전략을 찾고 있습니다.

다른 전략 중 하나는 위키 소프트웨어를 가져 와서 내 전체 데이터 세트를 해당 위키에 텍스트로 내보내고 위키를 사용하여 검색하는 것과 같은 일을하는 것으로 생각했습니다. 검색의 대상은 모든 의도에 대한 것입니다 목적은 이미 존재하는 검색의 99 %와 기능적으로 동일하므로 다른 입력 데이터 소스를 제공하고 약간 다른 방식으로 출력 형식을 지정하고자합니다. 둘 다 이미 수행 방법을 알고 있습니다.

이러한 종류의 검색이 수행되는 방법에 대한 조언이 반드시 있어야합니다.

+0

귀하와 귀하의 이해 관계자 만이 '합리적인'결과를 구성하는 자격을 얻을 수 있습니다. 마찬가지로 관련성에 대해서도 마침내 결과를 가장 잘 표시하는 방법은 ... 귀하와 귀하의 이해 관계자가 가장 잘 정의한 것입니다. – Lazarus

+0

그래,하지만 대부분의 사람들이 합리적인 것이 무엇인지 99 %에 동의 할 것이라고 확신한다. 그것만이 내부 사용을위한 빠른 검색 도구가 될 것이고, 대부분의 사람들이 그것이 나를 위해 충분히 좋은 분별있는 것으로 생각할 때까지 그렇게 될 것입니다. 전체 텍스트 검색은 꽤 일반적인 요구 사항이어야합니다. 누군가에게 꼬집음을 가할 수 있고 데이터를 80 %로 좋게 만들 수있을 때 데이터에 특유하고 특별한 것을하기 위해 엄청난 시간을 투자하고 싶지는 않습니다. – Justin

답변

2

당신은 ... 그것은 와일드 카드를 지원하는 등 가중치로

+0

이것이 내가 사용을 끝낸 이유입니다. 상상했던 것보다 작업이 적었지만 유연했습니다. – Justin

0

귀하의 주제는 데이터베이스 관련 질문입니다. 당신은 당신이 사용할 데이터베이스를 sepcify해야합니다. 프로그램에서 검색하는 대신 데이터베이스 엔진에 검색 키워드를 지정할 수 있습니다.

2

SQL Server (Express 버전 포함)에는 모두 full free-text search 기능이 있습니다. 이렇게하면 열 내에서 텍스트를 검색 할 수 있지만 IFilter를 사용하여 포함 된 문서 내에서 검색 할 수도 있습니다.

는 "하나 또는 그 이상의 문자 기반 데이터를 포함하는 열에 대한 행이 0의 테이블을 돌려 : 당신은 지능적으로 콘텐츠를 내 검색 순위 순서로 반환하는 T-SQL에서 FREETEXTTABLE 명령을 사용할 수 있습니다 값 의미를 일치 하지만 지정된 자유 텍스트. FREETEXTTABLE의 텍스트가 아닌 정확한 표현을위한 유형은 일반 테이블 이름처럼 SELECT 문의 FROM 절에서 를 참조 할 수 있습니다.

FREETEXTTABLE을 사용하는 쿼리는 (RANK) 및 각 행에 대한 관련 순위 순위 값및 전체 텍스트 키 (KEY)를 반환하는 프리 텍스트 형식의 전체 텍스트 쿼리를 지정합니다.

예 :

SELECT FT_TBL.CategoryName 
    ,FT_TBL.Description 
    ,KEY_TBL.RANK 
FROM dbo.Categories AS FT_TBL 
    INNER JOIN FREETEXTTABLE(dbo.Categories, Description, 
     'sweetest candy bread and dry meat') AS KEY_TBL 
     ON FT_TBL.CategoryID = KEY_TBL.[KEY]; 

자세한 내용은 Understanding SQL Server Full-Text Indexing을 참조하십시오.

+0

괜찮아 보이지만 몇 가지 문제가 있습니다. 1은 html을 적절하게 색인하지 않습니다. html, br span 등을 검색하면 ... 렌더링 된 HTML에 'html이 포함 된 결과를 반환하는 것이 아니라 수백만 개의 더프 결과를 반환합니다. 'br' 'span'등 ... – Justin

+0

또한 가중치/순위 작업 방식이 다루기 힘들어 보입니다. - "html boolean WebRequest"와 같은 검색을 입력하면 결과 순위를 매기는 것이 얼마나 까다 롭습니다. 3 개 모두가 1 개만 나타나는 곳에 3 개가 모두 나타나거나 큰 문서에서 3 개 모두가 튀어 나오는 결과가 표시됩니다. – Justin

0

SQL 루트를 사용하지 않으려면 Microsoft Search Server 2008 Express을 고려하십시오. 무료이며 강력하며 사용하기 쉽습니다. 그것은 귀하의 모든 요구 사항을 충족하고 자동으로 순위와 같은 것들을 처리합니다.