[C#] Lucene.net - 刪除索引中的某筆資料
標籤: .Net , C# , Lucene.net
[C#] 盤古分詞,動態增加字典分詞+詞性
很久很久以前,寫過透過外部程式去編修字典檔,但是如果要靠程式自己學習,就要自己能夠用程式去新增分詞字典庫,所以這篇是要做這件事情。
我輸入一句話"Hello ,您好,今天主要是來解析的是當麻的杜拜塔!" 字典一定不認識 "當麻"跟 "杜拜",用預設的分詞看看
標籤: ASP.net , C# , Lucene.net
[C#] 盤古分詞,尋找句子中的分詞+詞性
標籤: ASP.net , C# , Lucene.net
[C#] Lucene.net - 使用盤古建立分詞 PanGuAnalyzer
有一篇文章說到有關於 盤古分詞 這東西…
可以參考這一篇 當麻許-盤古分詞,尋找句子中的分詞
之前我們建立Lucene.net 的索引的時候,我們用的都是Lucene 標準的分析器
IndexWriter indexWriter = new IndexWriter(dir, new StandardAnalyzer(Lucene.Net.Util.Version.LUCENE_29), true, IndexWriter.MaxFieldLength.UNLIMITED);
這時候我們用 NLuke 來看看我們建立得索引..
標籤: ASP.net , C# , Lucene.net
[C#] 盤古分詞,尋找句子中的分詞
大家在學英文的時候,不是有學過..
主詞 + 動詞 + 受詞 ex. I love you.
主詞 +be 動詞 + 形容詞 / 名詞 ex. I am a developer.I am happy.
其實中文也有,只是從小就很熟習用法..
所以不太會去注意…
但是 一句話 你可以看得出中間的每一個分詞..
譬如例句:
當麻跟一群正妹去散步,不小心碰到阿凱凱
在你腦中會解釋:
當麻 跟 一群 正妹 去 散步 不 小心 碰到 阿凱凱
但是其實這都是要靠中文分詞的 Library 才會辦到..
這也是各大搜尋的原理之一,必須去判斷分詞跟斷句 …
對這一塊有興趣的 可以問一下一位高手學長 陳智揚老師
之前跟他聊過 他對這一塊頗有深入研究…
最近在看一套分詞軟體叫做盤古, 接下來做很簡單的介紹...
下載網址:http://pangusegment.codeplex.com
下載後,可以引入 Library : PanGu.dll
之後我們就來測試一下分詞能力…
標籤: ASP.net , C# , Lucene.net
[C#] Lucene.net - 模糊搜尋FuzzyQuery
這一篇來簡單說一下關於還很有改進空間的 FuzzyQuery ..
關於 Fuzzy :
概念是思維的基本形式之一,它反映了客觀事物的本質特征。人類在認識過程中,把感覺到的事物的共同特點抽象出來加以概括,這就形成了概念。比如從白雪、白馬、白紙等事物中抽象出“白”的概念。一個概念有它的內涵和外延,內涵是指該概念所反映的事物本質屬性的總和,也就是概念的內容。外延是指一個概念所確指的對象的範圍。例如“人”這個概念的內涵是指能製造工具,並使用工具進行勞動的動物,外延是指古今中外一切的人。來源 : http://wiki.mbalib.com/zh-tw/%E6%A8%A1%E7%B3%8A%E7%90%86%E8%AE%BA
標籤: ASP.net , C# , Lucene.net
[C#] Lucene.net 日期範圍搜尋
筆記一下,因為之前都是做關鍵字搜尋,其實國外有人寫過範圍搜尋範例,
我只是小咖,只是他們加入許許多多條件,花了一點時間才搞懂,這方法不一定是最好的..
但是至少解決我暫時遇到的範圍搜尋..
public List<Dict> SearchDateRangeSample(string searchContent)
{
DirectoryInfo dirInfo = new DirectoryInfo(ArticlePath);
FSDirectory dir = FSDirectory.Open(dirInfo);
IndexSearcher search = new IndexSearcher(dir, true);
List<Dict> lst = new List<Dict>();
Filter f=new RangeFilter("DateField", "20120101","20120622",true,true);
Query q = new MatchAllDocsQuery();
FilteredQuery filteredQuery = new FilteredQuery(q, f);
Hits hits = search.Search(filteredQuery, f);
for (int i = 0; i < hits.Length(); i++)
{
Dict dm = new Dict();
dm.Tag = hits.Doc(i).GetField("Tag").StringValue();
dm.Id = hits.Doc(i).GetField("Id").StringValue();
dm.Date1 = DateTime.ParseExact(hits.Doc(i).GetField("Date1").StringValue(), "yyyyMMdd", CultureInfo.InvariantCulture);
lst.Add(dm);
}
return lst;
}
標籤: C# , Lucene.net
[C#] 如何從大量JSON檔案中找尋關鍵字 (Regular Expression篇)
上一篇文章 如何從大量 JSON 檔案中找尋關鍵字 (JSON.net 還原篇)
提到在十萬筆資料下面,對某一欄位 (案例為 Memo 欄位) 的內容進行關鍵字搜尋..
可以搜尋出我要的關鍵字資料,拿去給老闆看…
老闆問我說,你這 2x 秒鐘的搜尋有啥用嗎?!
所以我在想…
如何才能夠更快..
標籤: C# , JSON , Lucene.net
[C#] 如何從大量 JSON 檔案中找尋關鍵字 (Lucene.net篇-建立索引)
如何從大量 JSON 檔案中找尋關鍵字 (JSON.net 還原篇) 、如何從大量 JSON 檔案中找尋關鍵字 (Regular Expression 篇)
中對 10 萬筆個別 JSON 資料進行測試,但是結果卻是非常的慢…
大概都要花到 25~30 秒的時間…
正所謂..
如何更快.. 是我腦中一直想到的…
標籤: ASP.net , C# , Lucene.net
[C#] 如何從大量 JSON 檔案中找尋關鍵字 (Lucene.net 篇 - 關鍵字搜尋)
上一篇文章 如何從大量 JSON 檔案中找尋關鍵字 (Lucene.net 篇 - 建立索引)
我們提到如何將十萬筆資料製作索引..
接下來我們就是對索引進行搜尋..
資料來源 (前情提要)
首先我在 Source 這檔案夾下面建立 10 萬筆資料,不多,但是也不太少,但是產生跟複製的時候足以讓我電腦 hang 住..這資料結構長這樣
{
"Id":"4",
"Memo":"的,你快挖了丁老賊的眼珠出來,給我報仇。」蕭峰一時難以明白其間真相,目光環掃,在人君中見到了段正淳和",
"Birthday":"1900-01-05T00:00:00",
"Age":4
}
標籤: C# , JSON , Lucene.net
[C#] Lucene.net - 透過 IndexReader 刪除索引中的指定資料…
使用 Lucene 建立索引後基本上,更新他做的動作都是刪除後,全部重做..
但是如果是要刪除某筆資料是可以做到的,這樣可以避免重新再製作一次 index ..
如何建立索引資料可以參考此篇 http://www.dotblogs.com.tw/junegoat/archive/2012/08/03/c-sharp-lucene-create-index.aspx
畢竟當資料一大,製作 index 是很花時間的…
原本製作 index 後我搜尋資料…
標籤: ASP.net , C# , Lucene.net
[C#] Lucene.net–對於搜尋結果進行排序
上次有篇文章 如何從大量 JSON 檔案中找尋關鍵字 (Lucene.net 篇 - 關鍵字搜尋)
有朋友提到說,為什麼搜尋結果怪怪的,跟之前幾篇..
如何從大量 JSON 檔案中找尋關鍵字 (JSON.net 還原篇) 為什麼不同..
其實是因為搜尋出來的結果,並沒有排序,這篇文章我們來看看怎麼進行排序 …
看一下原本的搜尋..
標籤: ASP.net , C# , Lucene.net
[C#] Lucene.net–透過 TermRangeQuery 進行日期搜尋
平常在做專案尤其是處理訂單時候,日期搜尋是一定要具備的..
在 Lucene.net 下面如何進行日期搜尋..
目標資料簡述
每一筆資料大概結構為
{
"Id":"1200",
"Memo":"都是暗自忌憚,同時退開數尺,跟著各自反手,又抓了一名弟子,向前擲出。那兩名弟子又是在半空中一撞,發出",
"Birthday":"1903-04-16T00:00:00",
"Age":1200
}
編號 1~ 1200 其中 Birthday 欄位為 1900/1/2 ~ 1903/4/6
標籤: C# , Lucene.net
[C#] Lucene.net–透過 Filter 過濾條件
上一篇文章 談到 透過 TermRangeQuery 進行日期搜尋
其實透過查詢的方法不只有 Query 還有 Filter 可以用..
像是原本使用 Query 查詢 日期範圍:
C# Code :
// 其 parameters 為 欄位名稱, 下底 (小值), 上底 (大值), 是否包含最小值, 是否包含最大值
Query query1 = new TermRangeQuery("BirthDay", "19001101", "19001202", true, true);
var hits = search.Search(query1, null, search.MaxDoc()).ScoreDocs;
可以直接使用 Filter 做過濾..
TermRangeFilter 過濾時間
標籤: C# , Lucene.net
[C#]Lucene.net–搜尋數字範圍問題以及暫時解答
上一片文章提到過有關於日期搜尋 透過 TermRangeQuery 進行日期搜尋
其中 我們也可以對一般數字欄位 譬如 年紀、數量 進行搜尋…
資料 :
{"Id":"9",
"Memo":"當麻左手凌空劈出,右掌跟著迅捷之極的劈出,左手掌力先發後到,右手掌力後發先到,兩股力道交錯而前,詭異之極",
"Birthday":"1900-01-10T00:00:00",
"Age":9}
標籤: C# , Lucene.net
[C#]Lucene.net–增加索引,清除所有索引
如何增加索引,這問題從我寫這一系列文章以來已經被問很多次了~哈哈~
其實看過一些文件..在Lucene. 中,其實都是重做index ..
但是你確保,你的資料是新的,也就是你的定義的Id 欄位不會重複
標籤: C# , Lucene.net
[C#]Lucene.net–使用RAMDirectory、 優化Index
過去介紹過如何透過 Lucene.net 去製作 index ..
其中我所使用的都是..
FSDirectory dir = FSDirectory.Open(new DirectoryInfo("Index 目錄"));
但是其實有一種方法可以加快,製作 index 的速度也就是 RAMDirectory
標籤: C# , Lucene.net
[C#]Lucene.net–透過 NumericField , NumericRangeQuery 建立數字範圍索引,搜尋數字範圍
上次 寫一篇有關於 Lucene.net–搜尋數字範圍問題以及暫時解答 之後..
有一位前輩 sholfen 給了我一個 關鍵字提示 NumericField
我上網查了一下文件,果然這就是我要的東西.. 在也不用利用小技巧來解決數字的問題了.. OH~Ya..
感謝 sholfen 大大~果然寫 blog 也可以學東西..
標籤: ASP.net , C# , Lucene.net
[C#]Lucene.net–跨字搜尋(詞組搜尋) PhraseQuery
PhraseQuery 詞組搜尋,主要是可以達到跨字數範圍搜尋,
舉例來說 假設 你希望找尋 我…你 中間可能模糊範圍在 3 個字以內..
這時候要使用 PhraseQuery
PhraseQuery phraseQuery = new PhraseQuery();
// 其中 3 這數字代表 允許中間的插入數值 為三個字
phraseQuery.SetSlop(3);
// 搜尋 Memo 此欄位 出現 我 還有 你 中間間最多三個字..
phraseQuery.Add(new Term("Memo", "我"));
phraseQuery.Add(new Term("Memo", "你"));
標籤: ASP.net , C# , Lucene.net