index.overview.html 6.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103
  1. <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
  2. <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
  3. <head>
  4. <meta http-equiv="Content-Type" content="text/html; charset=gbk" />
  5. <meta name="language" content="zh-cn" />
  6. <link rel="stylesheet" type="text/css" href="../api/css/style.css" />
  7. <link rel="stylesheet" type="text/css" href="../api/css/guide.css" />
  8. <link rel="stylesheet" type="text/css" href="../api/css/highlight.css" />
  9. <title>索引概述</title>
  10. </head>
  11. <body>
  12. <div id="apiPage">
  13. <div id="apiHeader">
  14. <a href="http://www.xunsearch.com" target="_blank">Xunsearch PHP-SDK</a> v1.3.2 权威指南
  15. </div><!-- end of header -->
  16. <div id="content" class="markdown">
  17. <div class="toc"><ol><li><a href="#ch0">什么是索引?</a></li><li><a href="#ch1">如何开始使用索引?</a></li><li><a href="#ch2">如何更换索引库?</a></li><li><a href="#ch3">索引更新是异步行为</a></li></ol></div><h1 id="-">索引概述</h1>
  18. <h2 id="ch0">1. 什么是索引?<a name="ch0" class="anchor">?</a></h2>
  19. <p>索引在 <code>Xunsearch</code> 中泛指用于检索的数据库文件总称。每一次检索数据均为访问和读取
  20. 索引文件,每一次更新数据则是对索引文件的修改。</p>
  21. <p><code>Xunsearch</code> 每个搜索项目的索引数据是分开单独存放的,索引本质上是一系列预设计文件,
  22. 内部都是特别设计的 <code>Tree</code> 结构,但这些东西不是这份指南所关注的。假设一个项目的名称
  23. 为 <code>demo</code> (即 <code>INI</code> 文件中 <code>project.name</code> 的值),那么它在服务端的索引数据的存储
  24. 路径为:</p>
  25. <pre>$prefix/data/demo
  26. </pre>
  27. <p>该目录底下包含 2 个主要索引数据库,分别是</p>
  28. <ul>
  29. <li><code>db</code> 默认的主索引数据库,各种检索数据均存放在此</li>
  30. <li><code>log_db</code> 搜索日志数据库,用于存放搜索日志相关,用于实现相关搜索、搜索建议、拼音搜索等</li>
  31. </ul>
  32. <h2 id="ch1">2. 如何开始使用索引?<a name="ch1" class="anchor">?</a></h2>
  33. <p>在 <code>PHP-SDK</code> 中,索引管理由类型为 <a href="../api/XSIndex.html">XSIndex</a> 的对象所维护。在 <a href="../api/XS.html">XS</a> 项目中,通过读取
  34. <a href="../api/XS.html#index">XS::index</a> 属性来获取索引管理对象,然后展开各种操作,而不是自行创建对象。后面章节中
  35. 的相关测试代码如果没有特别编写,其中的 <code>$index</code> 均为通过类似以下的方式获取的索引对象:</p>
  36. <div class="hl-code"><div class="php-hl-main"><pre><span class="php-hl-reserved">require</span> <span class="php-hl-quotes">'</span><span class="php-hl-string">$prefix/sdk/php/lib/XS.php</span><span class="php-hl-quotes">'</span><span class="php-hl-code">;
  37. </span><span class="php-hl-var">$xs</span><span class="php-hl-code"> = </span><span class="php-hl-reserved">new</span> <span class="php-hl-identifier">XS</span><span class="php-hl-brackets">(</span><span class="php-hl-quotes">'</span><span class="php-hl-string">demo</span><span class="php-hl-quotes">'</span><span class="php-hl-brackets">)</span><span class="php-hl-code">; </span><span class="php-hl-comment">//</span><span class="php-hl-comment"> 建立 XS 对象,项目名称为:demo</span>
  38. <span class="php-hl-var">$index</span><span class="php-hl-code"> = </span><span class="php-hl-var">$xs</span><span class="php-hl-code">-&gt;</span><span class="php-hl-identifier">index</span><span class="php-hl-code">; </span><span class="php-hl-comment">//</span><span class="php-hl-comment"> 获取 索引对象</span></pre></div></div>
  39. <p>索引的维护包括数据修改/更新、数据删除、添加数据等操作,由后面的篇幅分开详细讲解。</p>
  40. <h2 id="ch2">3. 如何更换索引库?<a name="ch2" class="anchor">?</a></h2>
  41. <p>默认使用的索引库名称为 <code>db</code>,对应到服务端的 <code>$prefix/data/$name/db</code>,一般开发时不需要
  42. 关注这个本质。但如果您的索引数据库相当大,希望对索引库进行适当的分割,可以自命名新的索引库。
  43. 在搜索时可以使用 <a href="../api/XSSearch.html#addDb">XSSearch::addDb</a> 进行多库并行搜索。</p>
  44. <div class="hl-code"><div class="php-hl-main"><pre><span class="php-hl-comment">//</span><span class="php-hl-comment"> 比如把当前索引更新到名称为 db2 的库中</span>
  45. <span class="php-hl-var">$index</span><span class="php-hl-code">-&gt;</span><span class="php-hl-identifier">setDb</span><span class="php-hl-brackets">(</span><span class="php-hl-quotes">'</span><span class="php-hl-string">db2</span><span class="php-hl-quotes">'</span><span class="php-hl-brackets">)</span><span class="php-hl-code">;
  46. </span><span class="php-hl-comment">//</span><span class="php-hl-comment"> 在检索时同时搜索 db, db2 的作法,具体参考搜索的有关章节</span><span class="php-hl-code">
  47. ...
  48. </span><span class="php-hl-var">$search</span><span class="php-hl-code">-&gt;</span><span class="php-hl-identifier">addDb</span><span class="php-hl-brackets">(</span><span class="php-hl-quotes">'</span><span class="php-hl-string">db2</span><span class="php-hl-quotes">'</span><span class="php-hl-brackets">)</span><span class="php-hl-code">-&gt;</span><span class="php-hl-identifier">setQuery</span><span class="php-hl-brackets">(</span><span class="php-hl-code">...</span><span class="php-hl-brackets">)</span><span class="php-hl-code">-&gt;</span><span class="php-hl-identifier">search</span><span class="php-hl-brackets">(</span><span class="php-hl-brackets">)</span><span class="php-hl-code">;</span></pre></div></div>
  49. <h2 id="ch3">4. 索引更新是异步行为<a name="ch3" class="anchor">?</a></h2>
  50. <p>有必要指出的是,出于性能优化设计,所有的索引操作(包含添加、删除、修改文档)均是异步的
  51. 行为。也就是说在 <code>PHP-SDK</code> 的相关 <code>API</code> 返回后,只是说明已经将索引变动提交到操作队列中,
  52. 而并不是已经立即更新到磁盘上的索引数据库文件。因此,搜索结果将不能立即体现出您的变动。</p>
  53. <p>但请放心,这个时间差我们已经控制在非常合理的范围内,通常是若干秒。</p>
  54. <blockquote class="note">
  55. <p><strong>Note:</strong> 特别说明,索引清空是同步操作,立即生效。如果确实有必要,您可以以使用
  56. <a href="util.indexer.html">Indexer</a>的 <code>--flush</code> 选项来强制刷新索引。</p>
  57. </blockquote>
  58. <div class="revision">$Id$</div>
  59. <div class="clear"></div>
  60. </div><!-- end of content -->
  61. <div id="guideNav">
  62. <div class="prev"><a href="ini.first.html">&laquo; 编写第一个配置文件</a></div>
  63. <div class="next"><a href="index.add.html">添加文档 &raquo;</a></div>
  64. <div class="clear"></div>
  65. </div><!-- end of nav -->
  66. <div id="apiFooter">
  67. Copyright &copy; 2008-2011 by <a href="http://www.xunsearch.com" target="_blank">杭州云圣网络科技有限公司</a><br/>
  68. All Rights Reserved.<br/>
  69. </div><!-- end of footer -->
  70. </div><!-- end of page -->
  71. <div style="display:none;">
  72. <img src="../api/css/info.gif" />
  73. <img src="../api/css/tip.gif" />
  74. <img src="../api/css/note.gif" />
  75. </div>
  76. </body>
  77. </html>