解决方案 »
- gridview样式影响到内部的控件样式!
- 新手问题!这样的正则怎么写啊
- ajax asp.net控件应用报错,服务器无法在发送http标头之后修改cookie
- 超难问题:javascript读取GridView隐藏列
- 200分求 ToolBar与iframe连用的效果 解决再开贴
- 怎样可以做到像支付宝www.alipay.com那样,禁用浏览器的"查看源文件"功能
- 高分请教一下DNN有哪些免费模块
- 请问怎么样调用下面的JS方法?
- 请问DropDownList的Value是什么类型?
- 大家都是怎么控制treeview的导航的?有没有灵活的方案?
- asp.net
- ajax利用正则表达验证表单,无法做中文验证,数字字母却正常,不解,抓狂!!
//第三个参数要为:false,我注释里面也有些,如果仔细看
writer = new IndexWriter(IndexDic, PanGuAnalyzer, false, Lucene.Net.Index.IndexWriter.MaxFieldLength.LIMITED);
/* 第二个注意是调用函数不一样我分别写出来 */
//添加一条新的索引
writer.AddDocument(doc);
//修改一条索引
Term term = new Term("No", No);
writer.UpdateDocument(term, doc);
//删除一条索引
Term term = new Term("No", No);
writer.DeleteDocuments(term);看了是不是挺简单,接下来就是 查询了
我原来那个用的是ShootAnalyzer的分词,每周生成一次索引(要不然有的新的关键词原分词系统里面没有的就检索不到)。
//当WEB前端搜索显示全部索引库数据时候,我网上找资料好像没有很的好解决方案,都是在做索引的时候增加一个特殊字段索引或其他,我就是利用增加一个特殊字段索引,当用户搜索显示全部数据时候,传入参数:alllist 就能查询出所有索引库数据,如果有更好办法请告知下,这里先谢了。
doc.Add(new Field("AllList", "alllist", Field.Store.YES, Field.Index.NOT_ANALYZED));
我当时那个是针对静态HTML文件做的全文检索。
当时有HTML、分词库、索引库、索引建立更新程序(winform)、搜索功能(webform)组成,基本没涉及到数据库。流程是先用winform读取分词库来给所有的html建立索引库,然后搜索的时候根据用户传递过来的关键字返回符合关键字的html的url路径。所以这个分词库需要每周更新(没法做到那么智能,会自动区分关键字),每周更新索引。更新索引的时间比较长(4-6G大概需要4个小时左右(单线程))。我这方法是最笨的方法,当时也是百度不到文档,自己扣出来的。最终总算是实现了。不过现在像百度和google都带的有站内搜索,用着还是比较方便的。引用一个js就行了。
http://download.csdn.net/detail/u012076966/6247193
/// <summary>
/// 加载绑定数据
/// </summary>
protected void Bind()
{
string Name = txtName.Text;
string Alllist="1";//URL传值
//价格区间查询
string PriceStart = txtStart.Text;
string PriceEnd = txtEnd.Text;
Hits myhit = null;
//IndexDic 索引配置文件,上面已发
IndexSearcher mysea = new IndexSearcher(IndexDic); //SortField构造函数第三个字段true为降序,false为升序
string strListDesc = ddlOrder.SelectedValue;//排序字段
Sort sort = null;
//排序字段 price
if (strListDesc == "1")
{
sort = new Sort(new SortField("price", SortField.AUTO, false));
}
else
{
sort = new Sort(new SortField("price", SortField.AUTO, true));
}
BooleanQuery booleanQuery = new BooleanQuery();
TermQuery termNO = null;
TermQuery termAllList= null; //查询所有
if(Alllist=="1")
{
termAllList= new TermQuery(new Term("AllList", "alllist"));
booleanQuery.Add(termAllList , BooleanClause.Occur.MUST);
}
//按盘古分词查询
if(Name!="")
{
Name = GetKeyWordsSplitBySpace(Name);
QueryParser parse = new QueryParser("Name", PanGuAnalyzer);
Query query = parse.Parse(Name);
parse.SetDefaultOperator(QueryParser.Operator.OR);
booleanQuery.Add(query, BooleanClause.Occur.MUST);
}
Filter filter = null;
//价格 区间查询
if (PriceStart != "" && PriceEnd != "")
{
float fspc = float.Parse(PriceStart);
float fepc = float.Parse(PriceEnd ); booleanQuery.Add(NumericRangeQuery.NewFloatRange("Price", fspc, fepc, true, true), BooleanClause.Occur.MUST);
}
//分页我使用的是 第三方分页控件
TopDocs docs = mysea.Search(booleanQuery, filter, AspNetPager1.StartRecordIndex + AspNetPager1.PageSize - 1, sort);
AspNetPager1.RecordCount = docs.totalHits;
if (docs != null && docs.totalHits > 0)
{
DataRow myrow;
DataTable mytab = new DataTable();
mytab.Columns.Add("No");
mytab.Columns.Add("Name");
mytab.Columns.Add("Price1");
mytab.Clear();
for (int i = 0; i < docs.totalHits; i++)
{
//分页读取数据
if (i >= AspNetPager1.StartRecordIndex - 1 && i < AspNetPager1.StartRecordIndex + AspNetPager1.PageSize - 1)
{
Document doc = mysea.Doc(docs.scoreDocs[i].doc);
myrow = mytab.NewRow();
#region 给DataTable每行赋值根据DataRow
myrow[0] = doc.Get("No").ToString();
myrow[1] = doc.Get("Name").ToString();
myrow[2] = doc.Get("Price1").ToString();
#endregion
mytab.Rows.Add(myrow);
myrow.AcceptChanges();
}
}
//绑定数据控件
rp_Item.DataSource=mytab;
rp_Item.DataBind();
mysea.Close();
}
}
/// <summary>
/// 处理关键字为索引格式
/// </summary>
/// <param name="keywords"></param>
/// <returns></returns>
private string GetKeyWordsSplitBySpace(string keywords)
{
PanGuTokenizer ktTokenizer = new PanGuTokenizer();
StringBuilder result = new StringBuilder();
ICollection<WordInfo> words = ktTokenizer.SegmentToWordInfos(keywords);
foreach (WordInfo word in words)
{
if (word == null)
{
continue;
}
result.AppendFormat("{0}^{1}.0 ", word.Word, (int)Math.Pow(3, word.Rank));
}
return result.ToString().Trim();
}
QQ:237377144, 谢谢LZ