我对Elastic Search很新,也许你可以帮助我:
所以,我有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
);
}
有人可以帮忙吗?
答案 0 :(得分:1)
所以我忘记为Fields添加setParam ......
$searchQuery->setParam('fields', array( 'Author', 'title', 'isbn', ));
现在一切正常!