我正在尝试使用Elasticsearch索引城市数据库并在字段上获得自动填充功能。
这是我的FOSElasticaBundle配置:
fos_elastica:
indexes:
xxxxxxx:
settings:
index:
analysis:
analyzer:
custom_analyzer:
type: custom
tokenizer: nGram
filter: [lowercase, asciifolding, stopwords_fr, elision, snowball_fr, word_delimiter]
custom_search_analyzer:
type: custom
tokenizer: standard
filter: [lowercase, asciifolding, stopwords_fr, elision, snowball_fr, word_delimiter]
tokenizer:
nGram:
type: nGram
min_gram: 4
max_gram: 20
filter:
snowball_fr:
type: snowball
language: French
elision:
type: elision
articles: [l, m, t, qu, n, s, j, d]
stopwords_fr:
type: stop
stopwords: [_french_]
ignore_case: true
types:
cities:
mappings:
id:
name: { search_analyzer: custom_analyzer, index_analyzer: custom_analyzer, type: string, store: yes }
persistence:
driver: orm
model: XXXXX\MainBundle\Entity\City
provider: { query_builder_method: createSearchIndexQueryBuilder }
listener: ~
finder: ~
repository: XXXXX\SearchBundle\Repository\CitySearchRepository
我的查询如下:
{
"query": {
"match": {
"name": "xxxxxx"
}
}
}
但我的问题在这里:
这是我第一次使用Elasticsearch,我认为解决方案就在附近,但如果有人遇到同样的问题,我很想知道更多。
谢谢,祝你有个美好的一天;)
答案 0 :(得分:0)
在您的查询中,您正在进行匹配。这意味着您将查找具有您正在寻找的(已分析)值的文档。
您应该查看completion suggester,这是实施自动填充建议的最佳方式。
如果你很懒,你可以使用prefix query:
{
"prefix" : { "user" : "Pa" }
}