2013-06-12 3 views
4

Lucene에서 비슷한 문서를 기록하고 싶습니다. 내 시나리오를 설명해 드리겠습니다.Lucene에서 비슷한 문서를 얻는 방법?

예를 들어 색인을 작성한 파일에 다음 레코드가 있다고 가정 해 보겠습니다. 내가 "홍길동"

를 검색 할 때

 
ID|First Name|Last Name|DOB 
1 |John  |Doe  |03/18/1990 
1 |John  |Twain |03/18/1990 
3 |Joey  |Johnson |05/14/1978 
3 |Joey  |Johnson |05/14/1987 
4 |Joey  |Johnson |05/14/1987 

난 당신이 Lucene을 볼 수있는 다음과 같은 순서로

 
ID|First Name|Last Name|DOB 
1 |John  |Doe  |03/18/1990 
3 |Joey  |Johnson |05/14/1978 
3 |Joey  |Johnson |05/14/1987 
4 |Joey  |Johnson |05/14/1987 
1 |John  |Twain |03/18/1990 
2 |Daniel |Doe  |03/25/1989 

레코드를 표시합니다 생성 된 검색 색인에 따라 표시하는 기록이다 검색 한 용어지만 레코드 사이의 유사성에 따르지 않는 용어. 제공된 용어로 레코드를 검색하고 유사성을 기준으로 표시하도록합니다.

나는 그들이 모두 유사하기 때문에 기록 존 트웨인과 신원 미상가 함께 표시되며 그 중 하나가 최대가 사용자의 쿼리와 일치했다 여기

 
ID|First Name|Last Name|DOB 
1 |John  |Doe  |03/18/1990 
1 |John  |Twain |03/18/1990 
3 |Joey  |Johnson |05/14/1978 
3 |Joey  |Johnson |05/14/1987 
4 |Joey  |Johnson |05/14/1987 
2 |Daniel |Doe  |03/25/1989 

원하는 것은.

나를 태워 주시겠습니까?

검색 코드.

String sa=textbox1.Text; // Assume this value to be John Doe in this case. 
String[] searchfield= new string[] { "ID", "First Name", "Last Name","DOB"}; 
IndexReader reader = IndexReader.Open(dir, true); 
TopScoreDocCollector coll = TopScoreDocCollector.Create(50, true); 
indexSearcher.Search(QueryMaker(sa, searchfield), coll); 
     ScoreDoc[] hits = coll.TopDocs().ScoreDocs; 
for (int i = 0; i < hits.Length; i++) 
     { 
      SearchResults result = new SearchResults(); 
      int docID = hits[i].Doc; 
      Document d = indexSearcher.Doc(docID); 
      result.fname=d.Get("First Name").ToString(); 
     } 

는 방법을 시도 : 오른쪽이나 심지어는 올바른 방법 만약 내가 그 일을하고 있다면 확실히 MoreLikeThis 클래스를 사용하려고하지만 한

. 또한, 두 개 이상의 docid에 Like 메서드를 어떻게 사용합니까?

IndexSearcher mltsearcher = new IndexSearcher(reader); 
MoreLikeThis mlt = new MoreLikeThis(reader); 
int docid =hits[1].Doc; 
Query query = mlt.Like(docid); 
TopDocs similardocs = mltsearcher.Search(query, 10); 

은 질문이 있으면 알려 주시기 바랍니다 다음 DOCID 년대를 사용하는 경우 나 같은 독자로부터

코드를 판독하고 있기 때문에 또한, 중복 문서를 표시합니다.

저는 지난 2 주 동안 Lucene을 배우려고 노력하고 있습니다. 많은 것을 모릅니다.

: 난 당신이 방법 QueryMaker()의 코드를 보여줄 수 Lucene.Net 3.0.3

+0

'sa'와'searchfield'의 값은 무엇입니까? – femtoRgon

+0

sa는 사용자가 입력 한 쿼리입니다. String sa = textbox1.Text 및 String String [] SearchField = 새 문자열 [] { "ID", "성", "성", "DOB"}; – Huzaifa

답변

2

을 사용하고?

나는 새로운 필드 "name"을 만들 수 있다고 생각합니다.이 필드는 이름과 성으로 구성되며 FuzzyQuery을 사용하여 새 필드를 검색 할 수 있습니다. FuzzyQuery은 문자열의 길이에 따라 점수 문서입니다.

관련 문제