<?xml version="1.0" encoding="UTF-8"?>
<!-- Reviewed: no -->
<!-- EN-Revision: 24249 -->
<sect1 id="learning.lucene.queries">
    <title>サポートされるクエリー</title>

    <para>
        <classname>Zend_Search_Lucene</classname> と Java Lucene は、
        強力なクエリー言語をサポートします。それにより、個別の語句や
        条件の範囲を検索できます。ワイルドカードとあいまい検索を使用したり、
        論理演算子を用いてクエリーを結合するなどして。
    </para>

    <para>
        クエリー言語についての詳細は、<link linkend="zend.search.lucene.query-language">
            Zend_Search_Lucene コンポーネント･ドキュメント</link>をご覧ください。
    </para>

    <para>
        下記は、いくつかの一般的なクエリーの種類と方式の例です。
    </para>

    <example id="learning.lucene.queries.keyword">
        <title>単一の単語に対する問い合わせ</title>

        <programlisting language="text"><![CDATA[
hello
]]></programlisting>

        <para>
            文書項目全体を通して単語 "hello" を検索します。
        </para>
    </example>

    <note>
        <title>異なる検索項目</title>

        <para>
            重要事項。Java Lucene は、デフォルトでは "contents" 項目だけを探していきます。
            しかし、<classname>Zend_Search_Lucene</classname> は、<emphasis>全</emphasis>項目を探していきます。
            この動作は、<methodname>Zend_Search_Lucene::setDefaultSearchField($fieldName)</methodname>
            メソッドを使って変更できます。
        </para>
    </note>

    <example id="learning.lucene.queries.multiple-words">
        <title>複数の単語に対する問い合わせ</title>

        <programlisting language="text"><![CDATA[
hello dolly
]]></programlisting>

        <para>
            2つの単語を検索します。両方の単語は任意です。
            結果の中に少なくとも一つ存在しなければいけません。
        </para>
    </example>

    <example id="learning.lucene.queries.required-words">
        <title>クエリーで必須の単語</title>

        <programlisting language="text"><![CDATA[
+hello dolly
]]></programlisting>

        <para>
            2つの単語を検索します。"hello" は必須で、"dolly" は任意です。
        </para>
    </example>

    <example id="learning.lucene.queries.prohibited-words">
        <title>問い合わせられた文書で単語を禁止</title>

        <programlisting language="text"><![CDATA[
+hello -dolly
]]></programlisting>

        <para>
            2つの単語を検索します。"hello" は必須で、'dolly' は禁止です。
            言い換えると、もし文書が "hello" にマッチし、単語
            "dolly" を含むと、それは一致セットに返されません。
        </para>
    </example>

    <example id="learning.lucene.queries.phrases">
        <title>句に対する問い合わせ</title>

        <programlisting language="text"><![CDATA[
"hello dolly"
]]></programlisting>

        <para>
            句 "hello dolly" を検索します。
            まさにその文字列が存在する文書のみマッチします。
        </para>
    </example>

    <example id="learning.lucene.queries.fields">
        <title>特定の項目に対する問い合わせ</title>

        <programlisting language="text"><![CDATA[
title:"The Right Way" AND text:go
]]></programlisting>

        <para>
            <property>title</property> 項目内の句 "The Right Way" および
            <property>text</property> 項目内の単語 "go" を検索します。
        </para>
    </example>

    <example id="learning.lucene.queries.fields-and-document">
        <title>特定の項目ならびに文書全体に対する問合せ</title>

        <programlisting language="text"><![CDATA[
title:"The Right Way" AND  go
]]></programlisting>

        <para>
            <property>title</property> 項目内の句 "The Right Way" および
            文書の全項目に現れる単語 "go" を検索します。
        </para>
    </example>

    <example id="learning.lucene.queries.fields-and-document-alt">
        <title>特定の項目ならびに文書全体に対する問合せ（別の例）</title>

        <programlisting language="text"><![CDATA[
title:Do it right
]]></programlisting>

        <para>
            <property>title</property> 項目内の単語 "Do" および
            全項目の単語 "it" および "right" を探していきます。
            いずれか一つマッチすると、文書がマッチすることになります。
        </para>
    </example>

    <example id="learning.lucene.queries.wildcard-question">
        <title>ワイルドカード "?" を用いた問い合わせ</title>

        <programlisting language="text"><![CDATA[
te?t
]]></programlisting>

        <para>
            パターン "te?t" にマッチする単語を検索します。
            そのパターンで、"?" は単一文字の全てです。
        </para>
    </example>

    <example id="learning.lucene.queries.wildcard-asterisk">
        <title>ワイルドカード "*" を用いた問い合わせ</title>

        <programlisting language="text"><![CDATA[
test*
]]></programlisting>

        <para>
            パターン "test*" にマッチする単語を検索します。
            そのパターンで、"*" はゼロ個以上の文字が連続したもの全てです。
        </para>
    </example>

    <example id="learning.lucene.queries.range-inclusive">
        <title>条件を含む範囲に対する問い合わせ</title>

        <programlisting language="text"><![CDATA[
mod_date:[20020101 TO 20030101]
]]></programlisting>

        <para>
            条件の範囲を検索します (含みます)。
        </para>
    </example>

    <example id="learning.lucene.queries.range-exclusive">
        <title>条件を含まない範囲に対する問い合わせ</title>

        <programlisting language="text"><![CDATA[
title:{Aida to Carmen}
]]></programlisting>

        <para>
            条件の範囲を検索します (含みません)。
        </para>
    </example>

    <example id="learning.lucene.queries.fuzzy">
        <title>あいまい検索</title>

        <programlisting language="text"><![CDATA[
roam~
]]></programlisting>

        <para>
            単語 "roam" をあいまい検索します。
        </para>
    </example>

    <example id="learning.lucene.queries.boolean">
        <title>ブーリアン検索</title>

        <programlisting language="text"><![CDATA[
(framework OR library) AND php
]]></programlisting>

        <para>
            ブーリアン・クエリー
        </para>
    </example>

    <para>
        サポートされたクエリーは全て、<classname>Zend_Search_Lucene</classname>
        の<link linkend="zend.search.lucene.query-api">クエリ構成 API</link>
        で構成できます。
        さらに、クエリー解析とクエリー構成を組み合わせるかもしれません。
    </para>

    <example id="learning.lucene.queries.combining">
        <title>解析されて構成されたクエリーを組み合わせ</title>

        <programlisting language="php"><![CDATA[
$userQuery = Zend_Search_Lucene_Search_QueryParser::parse($queryStr);

$query = new Zend_Search_Lucene_Search_Query_Boolean();
$query->addSubquery($userQuery, true  /* required */);
$query->addSubquery($constructedQuery, true  /* required */);
]]></programlisting>
    </example>
</sect1>
