2013-09-25 3 views
0

환경 :Lucene.Net A071, a072, A073과 같은 검색

Lucene.Net 3.03

비주얼 스튜디오 2010


나는이 시점에서 시간이 문제에 붙어 있었어요 나는 그 문제를 알아낼 수 없다. ","

나는 "저장"이라는 일부 인덱스, 다음과 같은 형식

A075, A073, A021 ....

각 문자열이 가게의 ID를 나타냅니다를 구축하고, 그것으로 구분 ,

내가 검색 "A073"을하고자하고 "저장"사전에 "A073"

감사를 포함하는 경우가 일치하는 데이터를 반환합니다

static RAMDirectory dir = new RAMDirectory(); 


public void BuildIndex() 
{ 

    IndexWriter iw = new IndexWriter(dir, new StandardAnalyzer(Version.LUCENE_30), true, IndexWriter.MaxFieldLength.UNLIMITED); 

    Document doc = new Document(); 
    doc.Add(new Field("PROD_ID", "", Field.Store.YES, Field.Index.ANALYZED, Field.TermVector.NO)); 
    doc.Add(new Field("Stores", "", Field.Store.YES, Field.Index.ANALYZED, Field.TermVector.NO)); 

    for (int i = 1; i <= 10; i++) 
    { 
     doc.GetField("PROD_ID").SetValue(Guid.NewGuid().ToString()); 
     doc.GetField("Stores").SetValue("a075,a073,no2" + i.ToString()); 
     iw.AddDocument(doc); 
    } 

    iw.Optimize(); 
    iw.Commit(); 
    iw.Close(); 
} 

private void Search(string KeyWord) 
{ 

    IndexSearcher search = new IndexSearcher(dir, true); 

    QueryParser qp = new QueryParser(Version.LUCENE_30, "Stores", new StandardAnalyzer(Version.LUCENE_30)); 

    Query query = qp.Parse(KeyWord); 

    var hits = search.Search(query, null, search.MaxDoc).ScoreDocs; 


    foreach (var res in hits) 
    { 
     Response.Write(string.Format("PROD_ID:{0}/Stores{1}" 
            , search.Doc(res.Doc).Get("PROD_ID").ToString() 
            , search.Doc(res.Doc).Get("Stores").ToString() + "<BR>")); 
    } 
} 

답변

0

Lucene.Net.Search.WildcardQuery을 사용해 보시고 와일드 카드를 포함하십시오. Google에서 Lucene 정규 표현식 검색을 사용하여 쿼리에서 정규 표현식을 사용하는 코드를 찾으려면 ... Contrib.Regex.RegexTermEnum이라는 contrib 구현이 있습니다.

대체 값은 쉼표로 구분 된 문자열 대신 배열을 전달하는 대신 다중 값 필드입니다. 이것은 Lucene에 의해 분할되고 인덱싱되며 일반 필드와 동일한 방법으로 쿼리 할 수 ​​있습니다. 또한 여러 번 쿼리 할 수 ​​있습니다. multiField : ValueA 및 mutliField : ValueB ...

+0

안녕하세요, 엘라, "*"와 같은 와일드 카드를 사용할 수 있다는 것을 알고 있지만 해결할 다른 방법이 있습니다 ~ 감사합니다 – holmes2136

+0

@Holmes 최종 편집본보기, 다중 값 필드 사용 당신을 위해 그것을해야합니다 – MichaC

+0

안녕, 엘라, MultifieldQueryFieldParser를 사용하는 것을 의미합니까? 하지만 그것은 여러 분야에서 검색과 같이 보입니다. 당신은 나에게 몇 가지 샘플 ~ thx를 줄 수 있겠습니까! – holmes2136