0

环境:

Lucene.Net 3.03

视觉工作室 2010


在这一点上,我已经被这个问题困扰了几个小时,我无法弄清楚这个问题。

我建立了一些名为“Stores”的索引,格式如下,

a075,a073,a021....

每个字符串代表 shop 的 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>"));
    }
}
4

1 回答 1

0

尝试使用Lucene.Net.Search.WildcardQuery并包含通配符。Google for Lucene 正则表达式搜索以查找一些代码以在您的查询中使用正则表达式...有一个名为 .contrib 的实现Contrib.Regex.RegexTermEnum

另一种方法是多值字段,而不是用逗号分隔的字符串,您可以将数组传递给它。这将被 Lucene 拆分和索引,您可以像普通字段一样查询它。此外,您可以多次查询它,例如 multiField:ValueA 和 mutliField:ValueB ...

于 2013-09-25T10:17:08.223 回答