2015-05-09 128 views
0

到彈性搜索的一部分我很新的,也許你可以幫我:Elasticsearch和symfony的搜索詞

所以,我有Symfony和Elasticsearch(FOSElasticaBundle)。

如果我在標題中搜索完整的單詞 - 一切正常(例如,如果我輸入「hello」,我將得到「hello」世界的結果)。

但問題是,是,我希望能夠搜索詞 的一部分也是如此,例如,如果我輸入「HEL」我想要得到的結果,其中「HEL」一詞的 一部分。

我config.yml

fos_elastica: 
    clients: 
     default: { host: localhost, port: 9200 } 
    indexes: 
     app: 
      client: default 
      settings: 
       index: 
        analysis: 
         analyzer: 
          custom_search_analyzer: 
           type: custom 
           tokenizer: standard 
           filter : [standard, lowercase, asciifolding] 
          custom_index_analyzer: 
           type: custom 
           tokenizer: standard 
           filter : [standard, lowercase, asciifolding, custom_filter] 
         filter: 
          custom_filter: 
           type: edgeNGram 
           side: front 
           min_gram: 1 
           max_gram: 20 
      types: 
       book: 
        mappings: 
         Author: 
         isbn: 
         title: { analyzer: custom_search_analyzer, analyzer: custom_index_analyzer, filter: custom_filter, type: string } 
        persistence: 
         driver: orm 
         model: VienasVienas\Bundle\BooksBundle\Entity\Book 
         provider: 
         listener: 
         finder: 

我的PHP函數

public function indexAction(Request $request) 
{ 
    $finder = $this->get('fos_elastica.finder.app.book'); 
    $searchTerm = $request->query->get('q'); 

    $searchQuery = new \Elastica\Query\QueryString(); 
    $searchQuery->setParam('query', $searchTerm); 
    $searchQuery->setDefaultOperator('AND'); 

    $books = $finder->find($searchQuery); 
    return array(
     'entities' => $books 
    ); 
} 

誰能幫助?

回答

1

所以,我只是忘了添加setParam的領域...

$searchQuery->setParam('fields', array(
     'Author', 
     'title', 
     'isbn', 
    )); 

現在一切工作!