我有一個名爲Tags
的表。在這個表格中,我有一個ID
,tag name
。 我想查找一個網頁文本框中的某些prefix words
時用戶輸入的總記錄數。 和stackoverflow.com一樣。在Lucene或SQL SERVER中獲取總記錄數全文搜索
當用戶鍵入"sql"
字,下面的結果:
我有一個名爲Tags
的表。在這個表格中,我有一個ID
,tag name
。 我想查找一個網頁文本框中的某些prefix words
時用戶輸入的總記錄數。 和stackoverflow.com一樣。在Lucene或SQL SERVER中獲取總記錄數全文搜索
當用戶鍵入"sql"
字,下面的結果:
從Lucene索引,就可以得到使用IndexReader.docfreq所述的含有項(docfreq)文件數,如:
reader.docfreq("tags", new BytesRef("sql"));
這將需要一個精確的期限值(沒有通配符)。你應該正常地執行你的通配符搜索,並且如上所述對每個顯示的結果調用docfreq。
類似的東西可以工作。請注意,一個領先的通配符可以是非常大在大型索引上變慢。
RAMDirectory dir = new RAMDirectory();
IndexWriter iw = new IndexWriter(dir, new KeywordAnalyzer(), IndexWriter.MaxFieldLength.UNLIMITED);
Document d = new Document();
Field f = new Field("tag", "", Field.Store.YES, Field.Index.ANALYZED);
d.Add(f);
f.SetValue("sql");
iw.AddDocument(d);
f.SetValue("mysql");
iw.AddDocument(d);
f.SetValue("sql-server");
iw.AddDocument(d);
f.SetValue("sql-server");
iw.AddDocument(d);
f.SetValue("sql-server");
iw.AddDocument(d);
f.SetValue("c#");
iw.AddDocument(d);
f.SetValue("java");
iw.AddDocument(d);
f.SetValue("java");
iw.AddDocument(d);
iw.Commit();
IndexReader reader = iw.GetReader();
Console.WriteLine("Tags containing sql");
using (FilteredTermEnum termEnum = new WildcardTermEnum(reader, new Term("tag", "*sql*")))
{
do
{
if (termEnum.Term != null)
Console.WriteLine(termEnum.Term.Text + ":" + reader.DocFreq(termEnum.Term));
}
while (termEnum.Next());
}
Console.WriteLine("\nTags containing java");
using (FilteredTermEnum termEnum = new WildcardTermEnum(reader, new Term("tag", "*java*")))
{
do
{
if (termEnum.Term != null)
Console.WriteLine(termEnum.Term.Text + ":" + reader.DocFreq(termEnum.Term));
}
while (termEnum.Next());
}
reader.Dispose();
iw.Dispose();