//封装类 [csharp] view plaincopyprint? using System; using System.Collections.Generic; using System.Linq; using System.Web; using Lucene.Net.Analysis; using Lucene.Net.Index; using Lucene.Net.Documents; using System.Reflection; using Lucene.Net.QueryParsers; using Lucene.Net.Search; namespace SearchTest { /// <summary> /// 盘古分词在lucene.net中的使用帮助类 /// 调用PanGuLuceneHelper.instance /// </summary> public class PanGuLuceneHelper { private PanGuLuceneHelper() { } #region 单一实例 private static PanGuLuceneHelper _instance = null; /// <summary> /// 单一实例 /// </summary> public static PanGuLuceneHelper instance { get { if (_instance == null) _instance = new PanGuLuceneHelper(); return _instance; } } #endregion #region 分词测试 /// <summary> /// 分词测试 /// </summary> /// <param name="keyword"></param> /// <returns></returns> public string Token(string keyword) { string ret = ""; System.IO.StringReader reader = new System.IO.StringReader(keyword); Lucene.Net.Analysis.TokenStream ts = analyzer.TokenStream(keyword, reader); bool hasNext = ts.IncrementToken(); Lucene.Net.Analysis.Tokenattributes.ITermAttribute ita; while (hasNext) { ita = ts.GetAttribute<Lucene.Net.Analysis.Tokenattributes.ITermAttribute>(); ret += ita.Term + "|"; hasNext = ts.IncrementToken(); } ts.CloneAttributes(); reader.Close(); analyzer.Close(); return ret; } #endregion #region 创建索引 /// <summary> /// 创建索引 /// </summary> /// <param name="datalist"></param> /// <returns></returns> public bool CreateIndex(List<MySearchUnit> datalist) { IndexWriter writer = null; try { writer = new IndexWriter(directory_luce, analyzer, false, IndexWriter.MaxFieldLength.LIMITED);//false表示追加(true表示删除之前的重新写入) } catch { writer = new IndexWriter(directory_luce, analyzer, true, IndexWriter.MaxFieldLength.LIMITED);//false表示追加(true表示删除之前的重新写入) } foreach (MySearchUnit data in datalist) { CreateIndex(writer, data); } writer.Optimize(); […]
View Details如果您想详细了解eval和JSON请参考以下链接: eval :https://developer.mozilla.org/En/Core_JavaScript_1.5_Reference/Global_Functions/Eval JSON:http://www.json.org/ eval函数的工作原理 eval函数会评估一个给定的含有JavaScript代码的字符串,并且试图去执行包含在字符串里的表达式或者一系列的合法的JavaScript语句。eval函数将把最后一个表达式或者语句所包含的值或引用作为返回值。 举例说明 eval评估JavaScript表达式
1 2 3 |
<span class="sh_keyword" style="font-weight: bold; color: blue;">var</span> bar <span class="sh_symbol" style="color: #8b0000;">=</span> <span class="sh_string" style="color: red;"><span style="font-family: 新宋体;">'bar'</span></span><span class="sh_symbol" style="color: #8b0000;">;</span><span class="sh_keyword" style="font-weight: bold; color: blue;"> var</span> foobar <span class="sh_symbol" style="color: #8b0000;">=</span> <span class="sh_predef_func" style="font-weight: bold; color: #00008b;">eval</span><span class="sh_symbol" style="color: #8b0000;">(</span><span class="sh_string" style="color: red;"><span style="font-family: 新宋体;">'"foo" + bar'</span></span><span class="sh_symbol" style="color: #8b0000;">);</span><span class="sh_predef_func" style="font-weight: bold; color: #00008b;"> alert</span><span class="sh_symbol" style="color: #8b0000;">(</span>foobar<span class="sh_symbol" style="color: #8b0000;">);</span> |
eval评估JavaScript语句
1 2 3 4 5 6 7 8 9 10 |
<span class="sh_keyword" style="font-weight: bold; color: blue;">var</span> bar <span class="sh_symbol" style="color: #8b0000;">=</span> <span class="sh_string" style="color: red;"><span style="font-family: 新宋体;">'bar'</span></span><span class="sh_symbol" style="color: #8b0000;">;</span><span class="sh_comment" style="font-style: italic; color: #a52a2a;"> // if variable bar equals 'bar', foobar is the result of </span><span class="sh_comment" style="font-style: italic; color: #a52a2a;">// last executing statement: bar="foo-bar";</span><span class="sh_keyword" style="font-weight: bold; color: blue;"> var</span> foobar <span class="sh_symbol" style="color: #8b0000;">=</span> <span class="sh_predef_func" style="font-weight: bold; color: #00008b;">eval</span><span class="sh_symbol" style="color: #8b0000;">(</span><span class="sh_string" style="color: red;"><span style="font-family: 新宋体;">'if(bar == "bar") {bar="foo-bar";} else {bar = "bar-foo";}'</span></span><span class="sh_symbol" style="color: #8b0000;">);</span><span class="sh_predef_func" style="font-weight: bold; color: #00008b;"> alert</span><span class="sh_symbol" style="color: #8b0000;">(</span>foobar<span class="sh_symbol" style="color: #8b0000;">);</span><span class="sh_comment" style="font-style: italic; color: #a52a2a;">// change the value</span>bar <span class="sh_symbol" style="color: #8b0000;">=</span> <span class="sh_string" style="color: red;"><span style="font-family: 新宋体;">'foo'</span></span><span class="sh_symbol" style="color: #8b0000;">;</span><span class="sh_comment" style="font-style: italic; color: #a52a2a;"> // now our the last executed statement is: bar = "bar-foo";</span><span class="sh_comment" style="font-style: italic; color: #a52a2a;"> // therefore the value of variable foobar has been changed</span><span class="sh_comment" style="font-style: italic; color: #a52a2a;"> // into 'bar-foo'</span> foobar <span class="sh_symbol" style="color: #8b0000;">=</span> <span class="sh_predef_func" style="font-weight: bold; color: #00008b;">eval</span><span class="sh_symbol" style="color: #8b0000;">(</span><span class="sh_string" style="color: red;"><span style="font-family: 新宋体;">'if(bar == "bar") {bar="foo-bar";} else {bar = "bar-foo";}'</span></span><span class="sh_symbol" style="color: #8b0000;">);</span><span class="sh_predef_func" style="font-weight: bold; color: #00008b;"> alert</span><span class="sh_symbol" style="color: #8b0000;">(</span>foobar<span class="sh_symbol" style="color: #8b0000;">);</span> |
JSON的格式 JSON的格式是由大括号和由冒号(:)构成的名值对所组成的。注意JSON格式与对象字面量 (object literals) 的区别:JSON的名字部分严格用引号+名字来表示。 举例说明 对象的字面量
1 2 3 4 5 6 7 8 |
<span class="sh_keyword" style="font-weight: bold; color: blue;">var</span> objectLiteral <span class="sh_symbol" style="color: #8b0000;">=</span> <span class="sh_cbracket" style="color: red;">{</span> <span class="sh_predef_var" style="color: #00008b;">name</span><span class="sh_symbol" style="color: #8b0000;">:</span> <span class="sh_string" style="color: red;"><span style="font-family: 新宋体;">"Objector.L"</span></span><span class="sh_symbol" style="color: #8b0000;">,</span> age<span class="sh_symbol" style="color: #8b0000;">:</span> <span class="sh_string" style="color: red;"><span style="font-family: 新宋体;">"24"</span></span><span class="sh_symbol" style="color: #8b0000;">,</span> special<span class="sh_symbol" style="color: #8b0000;">:</span> <span class="sh_string" style="color: red;"><span style="font-family: 新宋体;">"JavaScript"</span></span><span class="sh_symbol" style="color: #8b0000;">,</span> sayName<span class="sh_symbol" style="color: #8b0000;">:</span> <span class="sh_keyword" style="font-weight: bold; color: blue;">function</span><span class="sh_symbol" style="color: #8b0000;">()</span> <span class="sh_cbracket" style="color: red;">{</span> <span class="sh_keyword" style="font-weight: bold; color: blue;">return</span> <span class="sh_keyword" style="font-weight: bold; color: blue;">this</span><span class="sh_symbol" style="color: #8b0000;">.</span><span class="sh_predef_var" style="color: #00008b;">name</span><span class="sh_symbol" style="color: #8b0000;">;</span> <span class="sh_cbracket" style="color: red;">}</span><span class="sh_cbracket" style="color: red;"> }</span><span class="sh_symbol" style="color: #8b0000;">;</span> |
JSON对象
1 2 3 4 5 6 7 8 9 10 11 12 13 |
<span class="sh_keyword" style="font-weight: bold; color: blue;">var</span> jsonFormat <span class="sh_symbol" style="color: #8b0000;">=</span> <span class="sh_cbracket" style="color: red;">{ </span> <span class="sh_string" style="color: red;"><span style="font-family: 新宋体;">"summary"</span></span><span class="sh_symbol" style="color: #8b0000;">:</span> <span class="sh_string" style="color: red;"><span style="font-family: 新宋体;">"Blogs"</span></span><span class="sh_symbol" style="color: #8b0000;">, </span> <span class="sh_string" style="color: red;"><span style="font-family: 新宋体;">"blogrolls"</span></span><span class="sh_symbol" style="color: #8b0000;">:</span> <span class="sh_symbol" style="color: #8b0000;">[</span> <span class="sh_cbracket" style="color: red;">{ </span> <span class="sh_string" style="color: red;"><span style="font-family: 新宋体;">"title"</span></span><span class="sh_symbol" style="color: #8b0000;">:</span> <span class="sh_string" style="color: red;"><span style="font-family: 新宋体;">"Explore JavaScript"</span></span><span class="sh_symbol" style="color: #8b0000;">,</span> <span class="sh_string" style="color: red;"><span style="font-family: 新宋体;"> "link"</span></span><span class="sh_symbol" style="color: #8b0000;">:</span> <span style="font-family: 新宋体;"><span class="sh_string" style="color: red;">"http://example.com/"</span> </span> <span class="sh_cbracket" style="color: red;">}</span><span class="sh_symbol" style="color: #8b0000;">, </span> <span class="sh_cbracket" style="color: red;">{</span> <span class="sh_string" style="color: red;"><span style="font-family: 新宋体;"> "title"</span></span><span class="sh_symbol" style="color: #8b0000;">:</span> <span class="sh_string" style="color: red;"><span style="font-family: 新宋体;">"Explore JavaScript"</span></span><span class="sh_symbol" style="color: #8b0000;">,</span> <span class="sh_string" style="color: red;"><span style="font-family: 新宋体;"> "link"</span></span><span class="sh_symbol" style="color: #8b0000;">:</span> <span style="font-family: 新宋体;"><span class="sh_string" style="color: red;">"http://example.com/"</span> </span> <span class="sh_cbracket" style="color: red;">}</span> <span class="sh_symbol" style="color: #8b0000;">]</span><span class="sh_cbracket" style="color: red;"> }</span><span class="sh_symbol" style="color: #8b0000;">;</span> |
eval和JSON 由于Ajax的兴起,JSON这种轻量级的数据格式作为客户端与服务器之间的传输格式逐渐地流行起来,进而出现的问题是如何将服务器端构建好的JSON数据转化为可用的JavaScript对象。利用eval函数无疑是一种简单而直接的方法。在转化的时候需要将JSON字符串的外面包装一层圆括号:
1 |
<span class="sh_keyword" style="font-weight: bold; color: blue;">var</span> jsonObject <span class="sh_symbol" style="color: #8b0000;">=</span> <span class="sh_predef_func" style="font-weight: bold; color: #00008b;">eval</span><span class="sh_symbol" style="color: #8b0000;">(</span><span class="sh_string" style="color: red;"><span style="font-family: 新宋体;">"("</span></span> <span class="sh_symbol" style="color: #8b0000;">+</span> jsonFormat <span class="sh_symbol" style="color: #8b0000;">+</span> <span class="sh_string" style="color: red;"><span style="font-family: 新宋体;">")"</span></span><span class="sh_symbol" style="color: #8b0000;">);</span> |
为什么要加括号? 加上圆括号的目的是迫使eval函数在评估JavaScript代码的时候强制将括号内的表达式(expression)转化为对象,而不是作为语句(statement)来执行。举一个例子,例如对象字面量{},如若不加外层的括号,那么eval会将大括号识别为JavaScript代码块的开始和结束标记,那么{}将会被认为是执行了一句空语句。所以下面两个执行结果是不同的:
1 2 |
<span class="sh_predef_func" style="font-weight: bold; color: #00008b;">alert</span><span class="sh_symbol" style="color: #8b0000;">(</span><span class="sh_predef_func" style="font-weight: bold; color: #00008b;">eval</span><span class="sh_symbol" style="color: #8b0000;">(</span><span class="sh_string" style="color: red;"><span style="font-family: 新宋体;">"{}"</span></span><span class="sh_symbol" style="color: #8b0000;">);</span> <span class="sh_comment" style="font-style: italic; color: #a52a2a;">// return undefined</span><span class="sh_predef_func" style="font-weight: bold; color: #00008b;"> alert</span><span class="sh_symbol" style="color: #8b0000;">(</span><span class="sh_predef_func" style="font-weight: bold; color: #00008b;">eval</span><span class="sh_symbol" style="color: #8b0000;">(</span><span class="sh_string" style="color: red;"><span style="font-family: 新宋体;">"({})"</span></span><span class="sh_symbol" style="color: #8b0000;">);</span><span class="sh_comment" style="font-style: italic; color: #a52a2a;">// return object[Object]</span> |
JSON格式的名字部分为什么要加引号? 因为eval函数会将{foo:”bar”}解释成合法的JavaScript语句,而非表达式。但是人们往往想要的是让eval将这段代码解释成一个对象。所以JSON格式会强制你去在名字的外侧加上引号再结合圆括号,这样eval就不会错误的将JSON解释成代码块。 举例说明 eval错误解析语义
1 |
<span class="sh_predef_func" style="font-weight: bold; color: #00008b;">alert</span><span class="sh_symbol" style="color: #8b0000;">(</span><span class="sh_predef_func" style="font-weight: bold; color: #00008b;">eval</span><span class="sh_symbol" style="color: #8b0000;">(</span><span class="sh_string" style="color: red;"><span style="font-family: 新宋体;">'{foo:"bar"}'</span></span><span class="sh_symbol" style="color: #8b0000;">));</span> <span class="sh_comment" style="font-style: italic; color: #a52a2a;">// return "bar", incorrect</span> |
eval正确解析JSON
1 |
<span class="sh_predef_func" style="font-weight: bold; color: #00008b;">alert</span><span class="sh_symbol" style="color: #8b0000;">(</span><span class="sh_predef_func" style="font-weight: bold; color: #00008b;">eval</span><span class="sh_symbol" style="color: #8b0000;">(</span><span class="sh_string" style="color: red;"><span style="font-family: 新宋体;">'({"foo": "bar"})'</span></span><span class="sh_symbol" style="color: #8b0000;">));</span> <span class="sh_comment" style="font-style: italic; color: #a52a2a;">// return JSON object, correct</span> |
结论 理解eval的工作原理和json的严格的限定格式,合理结合eval和json应用于JavaScript的数据传递和对象转换。 following this format:
1 |
<span class="sh_predef_func" style="font-weight: bold; color: #00008b;">eval</span><span class="sh_symbol" style="color: #8b0000;">(</span><span class="sh_string" style="color: red;"><span style="font-family: 新宋体;">'{'</span></span> <span class="sh_symbol" style="color: #8b0000;">+</span> jsonString <span class="sh_symbol" style="color: #8b0000;">+</span> <span class="sh_string" style="color: red;"><span style="font-family: 新宋体;">')'</span></span><span class="sh_symbol" style="color: #8b0000;">);</span> |
from:http://www.jb51.net/article/21688.htm
View Details