Elasticsearch и Symfony ищут часть слова

Я новичок в Elastic Search, возможно, вы можете мне помочь:

Итак, у меня есть Symfony и Elasticsearch (FOSElasticaBundle).

Если я ищу полное слово в заголовке - все работает (например, если я наберу "привет", я получу результаты, где "привет" мир).

Но проблема в том, что я хочу иметь возможность искать и часть слова, например, если я наберу «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
    );
}

Кто-нибудь может помочь?


person Aleksandr    schedule 09.05.2015    source источник


Ответы (1)


Поэтому я просто забыл добавить setParam для полей...

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

Теперь Все работает!

person Aleksandr    schedule 09.05.2015