환경 :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>"));
}
}
안녕하세요, 엘라, "*"와 같은 와일드 카드를 사용할 수 있다는 것을 알고 있지만 해결할 다른 방법이 있습니다 ~ 감사합니다 – holmes2136
@Holmes 최종 편집본보기, 다중 값 필드 사용 당신을 위해 그것을해야합니다 – MichaC
안녕, 엘라, MultifieldQueryFieldParser를 사용하는 것을 의미합니까? 하지만 그것은 여러 분야에서 검색과 같이 보입니다. 당신은 나에게 몇 가지 샘플 ~ thx를 줄 수 있겠습니까! – holmes2136