0

ZendLuceneSearchでsymfonyを使用しています。私は持っています

$query = Zend_Search_Lucene_Search_QueryParser::parse($query.'*');
$hits = self::getLuceneIndex()->find($query);

時々私はエラーがあります:

パターンの先頭には、少なくとも3つの非ワイルドカード文字が必要です。

私がドキュメンテーションのように作るとき:

$pattern = new Zend_Search_Lucene_Index_Term($query.'*');
$query = new Zend_Search_Lucene_Search_Query_Wildcard($pattern);
$hits = self::getLuceneIndex()->find($query);

何も見つかりません。

4

2 に答える 2

1

私は正しくありませんが、それは私にとっては仕事です:

したがって、私の場合、クエリは3文字未満であるか、特殊文字を使用しているため失敗します。したがって、私の検索アクションでは次のようになります。

 public function executeAds(sfWebRequest $request)
  {
      if (!$query = $request->getParameter('query'))
    {
      return $this->forward('search', 'adssearch');
    }

   $query = str_replace(" ", "", $query);
   $query = preg_replace("/[^A-Za-z0-9]/","",$query);
    if (strlen(trim($query))<3)

    {
         $this->redirect('search/notice');
    }

    $this->ads = Doctrine_Core::getTable('Ads') ->getAdsLuceneQuery($query); 

私は使わない

$pattern = new Zend_Search_Lucene_Index_Term($query.'*');
$query = new Zend_Search_Lucene_Search_Query_Wildcard($pattern);
$hits = self::getLuceneIndex()->find($query);

それは私にとってはうまくいかないからです。

于 2011-07-25T14:36:07.300 に答える
1

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)ます。これに基づいて、元のコードスニペットは正常に機能するはずです(私のZend Lucene実装では機能しました)

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

于 2013-01-06T22:01:54.673 に答える