Enviroment:Lucene.Net поиск как A071, A072, A073
Lucene.Net 3,03
Visual Studio 2010
Я застрял на эту проблему в течение нескольких часов в этой точке и я не могу понять проблему.
я построить некоторый индекс с именем "Магазины", формат, как показано ниже,
A075, A073, A021 ....
каждая строка представляет идентификатор магазина, и Разделенный "" ,
я хотел бы поиск «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