<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml"> <head> <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> <title>9.2. 検索 — groonga v3.0.5 documentation</title> <link rel="stylesheet" href="../_static/groonga.css" type="text/css" /> <link rel="stylesheet" href="../_static/pygments.css" type="text/css" /> <script type="text/javascript"> var DOCUMENTATION_OPTIONS = { URL_ROOT: '../', VERSION: '3.0.5', COLLAPSE_INDEX: false, FILE_SUFFIX: '.html', HAS_SOURCE: true }; </script> <script type="text/javascript" src="../_static/jquery.js"></script> <script type="text/javascript" src="../_static/underscore.js"></script> <script type="text/javascript" src="../_static/doctools.js"></script> <link rel="shortcut icon" href="../_static/favicon.ico"/> <link rel="top" title="groonga v3.0.5 documentation" href="../index.html" /> <link rel="up" title="9. Specification" href="../spec.html" /> <link rel="next" title="10. Limitations" href="../limitations.html" /> <link rel="prev" title="9.1. GQTP" href="gqtp.html" /> </head> <body> <div class="header"> <h1 class="title"> <a id="top-link" href="../index.html"> <span class="project">groonga</span> <span class="separator">-</span> <span class="description">An open-source fulltext search engine and column store.</span> </a> </h1> <div class="other-language-links"> <ul> <li><a href="../../../ja/html/spec/search.html"><img src="../_static/jp.png" alt="日本語">日本語版はこちら</a></li> </ul> </div> </div> <div class="related"> <h3>Navigation</h3> <ul> <li class="right" style="margin-right: 10px"> <a href="../genindex.html" title="General Index" accesskey="I">index</a></li> <li class="right" > <a href="../limitations.html" title="10. Limitations" accesskey="N">next</a> |</li> <li class="right" > <a href="gqtp.html" title="9.1. GQTP" accesskey="P">previous</a> |</li> <li><a href="../index.html">groonga v3.0.5 documentation</a> »</li> <li><a href="../spec.html" accesskey="U">9. Specification</a> »</li> </ul> </div> <div class="document"> <div class="documentwrapper"> <div class="bodywrapper"> <div class="body"> <div class="section" id="id1"> <h1>9.2. 検索<a class="headerlink" href="#id1" title="Permalink to this headline">¶</a></h1> <p><a class="reference internal" href="../reference/commands/select.html"><em>select</em></a> コマンドがqueryパラメータを使ってどのように検索するのかを説明します。</p> <div class="section" id="id2"> <h2>9.2.1. 検索の挙動<a class="headerlink" href="#id2" title="Permalink to this headline">¶</a></h2> <p>検索の挙動には以下の3種類あり、検索結果によって動的に使い分けています。</p> <ol class="arabic simple"> <li>完全一致検索</li> <li>非わかち書き検索</li> <li>部分一致検索</li> </ol> <p>どのように検索の挙動を使い分けているかを説明する前に、まず、それぞれの検索の挙動を説明します。</p> <div class="section" id="id3"> <h3>9.2.1.1. 完全一致検索<a class="headerlink" href="#id3" title="Permalink to this headline">¶</a></h3> <p>検索対象文書は複数の語彙にトークナイズ(分割)され、それぞれを単位とした語彙表に索引を管理します。 検索キーワードも同一の方法でトークナイズされます。</p> <p>このとき、検索キーワードをトークナイズした結果得られる語彙の配列と同一の配列を含む文書を検索する処理を完全一致検索と呼んでいます。</p> <p>たとえば、TokenMecabトークナイザを使用した索引では「東京都民」という文字列は</p> <blockquote> <div>東京 / 都民</div></blockquote> <p>という二つの語彙の配列として格納されます。この索引に対して「東京都」というキーワードで検索した時、このキーワードは、</p> <blockquote> <div>東京 / 都</div></blockquote> <p>という二つの語彙の配列として処理されます。この語彙の並びは、「東京 / 都民」という語彙の並びには一致しませんので、完全一致検索ではヒットしません。</p> <p>これに対して、TokenBigramトークナイザを使用した索引では「東京都民」という文字列は</p> <blockquote> <div>東京 / 京都 / 都民 / 民</div></blockquote> <p>という四つの語彙の配列として格納されます。この索引に対して「東京都」というキーワードで検索した時、このキーワードは、</p> <blockquote> <div>東京 / 京都</div></blockquote> <p>という二つの語彙の配列として処理されます。この語彙の並びは、「東京 / 京都 / 都民」という語彙の並びに含まれますので、完全一致検索でヒットします。</p> <p>なお、TokenBigramトークナイザでは、アルファベット・数値・記号文字列についてはbigramを生成せず、一つの連続したトークンとして扱います。たとえば、「楽しいbilliard」という文字列は、</p> <blockquote> <div>楽し / しい / billiard</div></blockquote> <p>という三つの語彙の配列として格納されます。これに対して「bill」というキーワードで検索した時、このキーワードは、</p> <blockquote> <div>bill</div></blockquote> <p>という一つの語彙として処理されます。この語彙の並びは「楽し / しい / billiard」という語彙の並びには含まれないので、完全一致でヒットしません。</p> <p>これに対して、TokenBigramSplitSymbolAlphaトークナイザではアルファベット文字列についてもbigramを生成し、「楽しいbilliard」という文字列は、</p> <blockquote> <div>楽し / しい / いb / bi / il / ll / li / ia / ar / rd / d</div></blockquote> <p>という十一の語彙の配列として格納されます。これに対して「bill」というキーワードで検索した時、このキーワードは、</p> <blockquote> <div>bi / il / ll</div></blockquote> <p>という三つの語彙として処理されます。この語彙の並びは「楽し / しい / いb / bi / il / ll / li / ia / ar / rd / d」という語彙の並びに含まれるので、完全一致でヒットします。</p> </div> <div class="section" id="id4"> <h3>9.2.1.2. 非わかち書き検索<a class="headerlink" href="#id4" title="Permalink to this headline">¶</a></h3> <p>非わかち書き検索はパトリシア木で語彙表を構築している場合のみ利用可能です。</p> <p>非わかち書き検索の挙動はTokenBigramなどN-gram系のトークナイザーを利用している場合とTokenMecabトークナイザーを利用している場合で挙動が変わります。</p> <p>N-gram系のトークナイザーを利用している場合はキーワードで前方一致検索をします。</p> <p>例えば、「bill」というキーワードで検索した場合、「bill」も「billiard」もヒットします。</p> <p>TokenMeCabトークナイザーの場合はわかち書き前のキーワードで前方一致検索をします。</p> <p>例えば、「スープカレー」というキーワードで検索した場合、「スープカレーバー」(1単語扱い)にヒットしますが、「スープカレー」("スープ"と"カレー"の2単語扱い)や「スープカレーライス」("スープ"と"カレーライス"の2単語扱い)にはヒットしません。</p> </div> <div class="section" id="id5"> <h3>9.2.1.3. 部分一致検索<a class="headerlink" href="#id5" title="Permalink to this headline">¶</a></h3> <p>部分一致検索はパトリシア木で語彙表を構築していて、かつ、KEY_WITH_SISオプションを指定している場合のみ利用可能です。KEY_WITH_SISオプションが指定されていない場合は非わかち書き検索と同等です。</p> <p>部分一致検索の挙動はTokenBigramなどN-gram系のトークナイザーを利用している場合とTokenMecabトークナイザーを利用している場合で挙動が変わります。</p> <p>Bigramの場合は前方一致検索と中間一致検索と後方一致検索を行います。</p> <p>例えば、「ill」というキーワードで検索した場合、「bill」も「billiard」もヒットします。</p> <p>TokenMeCabトークナイザーの場合はわかち書き後のキーワードで前方一致検索と中間一致検索と後方一致検索をします。</p> <p>例えば、「スープカレー」というキーワードで検索した場合、「スープカレー」("スープ"と"カレー"の2単語扱い)や「スープカレーライス」("スープ"と"カレーライス"の2単語扱い)、「スープカレーバー」(1単語扱い)にもヒットします。</p> </div> </div> <div class="section" id="id6"> <h2>9.2.2. 検索の使い分け<a class="headerlink" href="#id6" title="Permalink to this headline">¶</a></h2> <p>groongaは基本的に完全一致検索のみを行います。完全一致検索でのヒット件数が所定の閾値以下の場合に限り、非わかち書き検索を行い、それでもヒット件数が閾値以下の場合は部分一致検索を行います。(閾値のデフォルト値は0です。)</p> <p>ただし、すでに検索結果セットが存在する場合はたとえヒット件数が閾値以下でも完全一致検索のみを行います。</p> <p>例えば、以下のようなクエリの場合は、それぞれの検索でヒット件数が閾値以下の場合は完全一致検索、非わかち書き検索、部分一致検索を順に行います。:</p> <div class="highlight-none"><div class="highlight"><pre>select Shops --match_column description --query スープカレー </pre></div> </div> <p>しかし、以下のように全文検索を行う前に検索結果セットが存在する場合は完全一致検索のみを行います。(point > 3で閾値の件数よりヒットしている場合):</p> <div class="highlight-none"><div class="highlight"><pre>select Shops --filter '"point > 3 && description @ \"スープカレー\""' </pre></div> </div> <p>そのため、descriptionに「スープカレーライス」が含まれていても、「スープカレーライス」は「スープカレー」に完全一致しないのでヒットしません。</p> </div> </div> </div> </div> </div> <div class="sphinxsidebar"> <div class="sphinxsidebarwrapper"> <h3><a href="../index.html">Table Of Contents</a></h3> <ul> <li><a class="reference internal" href="#">9.2. 検索</a><ul> <li><a class="reference internal" href="#id2">9.2.1. 検索の挙動</a><ul> <li><a class="reference internal" href="#id3">9.2.1.1. 完全一致検索</a></li> <li><a class="reference internal" href="#id4">9.2.1.2. 非わかち書き検索</a></li> <li><a class="reference internal" href="#id5">9.2.1.3. 部分一致検索</a></li> </ul> </li> <li><a class="reference internal" href="#id6">9.2.2. 検索の使い分け</a></li> </ul> </li> </ul> <h4>Previous topic</h4> <p class="topless"><a href="gqtp.html" title="previous chapter">9.1. GQTP</a></p> <h4>Next topic</h4> <p class="topless"><a href="../limitations.html" title="next chapter">10. Limitations</a></p> <h3>This Page</h3> <ul class="this-page-menu"> <li><a href="../_sources/spec/search.txt" rel="nofollow">Show Source</a></li> </ul> <div id="searchbox" style="display: none"> <h3>Quick search</h3> <form class="search" action="../search.html" method="get"> <input type="text" name="q" /> <input type="submit" value="Go" /> <input type="hidden" name="check_keywords" value="yes" /> <input type="hidden" name="area" value="default" /> </form> <p class="searchtip" style="font-size: 90%"> Enter search terms or a module, class or function name. </p> </div> <script type="text/javascript">$('#searchbox').show(0);</script> </div> </div> <div class="clearer"></div> </div> <div class="related"> <h3>Navigation</h3> <ul> <li class="right" style="margin-right: 10px"> <a href="../genindex.html" title="General Index" >index</a></li> <li class="right" > <a href="../limitations.html" title="10. Limitations" >next</a> |</li> <li class="right" > <a href="gqtp.html" title="9.1. GQTP" >previous</a> |</li> <li><a href="../index.html">groonga v3.0.5 documentation</a> »</li> <li><a href="../spec.html" >9. Specification</a> »</li> </ul> </div> <div class="footer"> © Copyright 2009-2013, Brazil, Inc. </div> </body> </html>