0

Zend Lucene 検索を使用しています。

    ......
    $results = $test->fetchAll();

                   setlocale(LC_CTYPE, 'de_DE.iso-8859-1');
          Zend_Search_Lucene_Analysis_Analyzer::setDefault(new Zend_Search_Lucene_Analysis_Analyzer_Common_Utf8());
                foreach ($results as $result) {
                    $doc = new Zend_Search_Lucene_Document();

                    // add Fields
                    $doc->addField(
                            Zend_Search_Lucene_Field::Text('testid', $result->id));
                    $doc->addField(
                            Zend_Search_Lucene_Field::Keyword('testemail', strtolower(($result->email))));
                    $doc->addField(
                            Zend_Search_Lucene_Field::Text('testconfirmdate', $result->confirmdate));
                    $doc->addField(
                            Zend_Search_Lucene_Field::Text('testcreateddate', $result->createddate));
                    // Add document to the index
                    $index->addDocument($doc);
                }
                // Optimize index.
                $index->optimize();

                // Search by query
                setlocale(LC_CTYPE, 'de_DE.iso-8859-1');
                if(strlen($Data['name']) > 2){
                    //$query = Zend_Search_Lucene_Search_QueryParser::parse($Data['name'].'*');
                                    $pattern = new Zend_Search_Lucene_Index_Term($Data['name'].'*');
                                    $query = new Zend_Search_Lucene_Search_Query_Wildcard($pattern);
                                    $this->view->hits = $index->find(strtolower($query));
                            }
                else{
                    $query  = $Data['name'];
                                    $this->view->hits = $index->find($query);
                                }
............

ここでうまく動作します:

  1. 完全な単語、最初の3文字、大文字と小文字を区別しない単語を指定すると機能します

私の問題は次のとおりです。

  1. Wildcard search is supported only for non-multiple word termsメールを検索すると、「 」のようなエラーが表示されました
  2. 1234「 」や「 」などの数字/日付で検索すると09/06/2011、「パターンの先頭には少なくとも 3 つのワイルドカード以外の文字が必要です」のようなエラーが表示されました。

ここで日付、メール、番号を検索したい。

4

2 に答える 2

0

NaanuManuの提案に基づいて、私はこれを理解するためにもう少し掘り下げました-私はここに関連する質問に私の答えを投稿しましたが、便宜上繰り返します:

Zend Referenceのドキュメントから直接取得すると、次のものを使用できます。

  • Zend_Search_Lucene_Search_Query_Wildcard::getMinPrefixLength()必要な最小プレフィックス長を照会し、
  • それを設定するために使用Zend_Search_Lucene_Search_Query_Wildcard::setMinPrefixLength()します。

したがって、私の提案は次の2つのいずれかになります。

  1. 使用してprefixMinLengthを0に設定しますZend_Search_Lucene_Search_Query_Wildcard::setMinPrefixLength(0)

  2. javascriptを使用してすべての検索クエリを検証するZend_Search_Lucene_Search_Query_Wildcard::getMinPrefixLength()か、ワイルドカードを使用する前に最小限のワイルドカードがあることを確認します(検証が柔軟になるように、デフォルトの「3」を想定するのではなく、クエリすることをお勧めします)

于 2013-01-06T22:26:32.720 に答える
0

ファイルzend/search / Lucene / search / search / query / wildcardで、パラメーターが設定されています。

private static $_minPrefixLength = 3;

それを変更し、それが動作する可能性があります..!

于 2012-05-29T10:11:37.593 に答える