Анализаторы Elastica FOSElastica Symfony2 не работают
Я собираюсь выяснить, как работает Elastica/FOSElastica. Я запустил его для очень простых поисковых запросов, где название продукта точно соответствует моей строке поиска.
Поскольку это не очень хороший способ поиска, мне нужно добавить анализаторы для улучшения результатов поиска. Но они не работают..
Я попытался просто скопировать и вставить этот пример кода (вставил мой индекс / типы, конечно) => http://obtao.com/blog/2013/10/configure-elasticsearch-on-an-efficient-way/
Итак, вот мой вопрос: как мне заставить работать мои анализаторы? Я думаю, я должен применить их в моем контроллере, но я не совсем уверен, как бы я это сделал...
Это мой конфиг
#app/config/config.yml
fos_elastica:
clients:
default: { host: localhost, port: 9200 }
indexes:
search:
client: default
settings:
index:
analysis:
analyzer:
custom_analyzer :
type : custom
tokenizer: nGram
filter : [stopwords, asciifolding ,lowercase, snowball, elision, worddelimiter]
custom_search_analyzer :
type : custom
tokenizer: standard
filter : [stopwords, asciifolding ,lowercase, snowball, elision, worddelimiter]
my_analyzer _:
type: snowball
language: German
tokenizer:
nGram:
type: nGram
min_gram: 2
max_gram: 20
filter:
snowball:
type: snowball
language: German
elision:
type: elision
articles: [l, m, t, qu, n, s, j, d]
stopwords:
type: stop
stopwords: [_german_]
ignore_case : true
worddelimiter :
type: word_delimiter
types:
article :
mappings:
articleNumber:
shortName: [ boost: 6, analyzer : custom_analyzer, custom_search_analyzer, my_analyzer]
shortDescription:
index_analyzer : custom_analyzer
search_analyzer : custom_search_analyzer
longDescription:
index_analyzer : custom_analyzer
search_analyzer : custom_search_analyzer
persistence:
driver: orm
model: IndexBundle\Entity\Articles
finder: ~
provider: ~
listener: ~
Это мой контроллер:
$query = new \Elastica\Query\Match();
$query->setFieldQuery(‘shortName’, $searchTerm);
$query->setFieldFuzziness(‘shortName’, 0.7);
$query->setFieldMinimumShouldMatch(‘shortName’, ’80%’);
$boolQuery = new \Elastica\Query\Bool();
$boolQuery->addMust($query);
$baseQuery = $query;
$filtered = new \Elastica\Query\Filtered($baseQuery);
$query = \Elastica\Query::create($filtered);
$articles = $finder->find($query);