我正在为我的 Symfony3 项目使用https://github.com/ongr-io/ElasticsearchBundle。这个捆绑包的原因是,我的项目正在使用推进。
到目前为止,一切都很好,运行良好。但现在我想添加搜索单词子串的可能性。例如,有一些名为 Test01、Test02、Test03 的项目......当我尝试搜索 Test 时,我没有得到任何结果。就在我输入像 Test01 这样的整个单词时。
我已经阅读了通配符搜索的可能性,但不同的解决方案说,使用 ngram 或 edge_ngram 将是一个更好的解决方案。
我试图在配置中指定它如下
ongr_elasticsearch:
analysis:
filter:
incremental_filter:
type: edge_ngram
min_gram: 3
max_gram: 10
analyzer:
incrementalAnalyzer:
type: custom
tokenizer: standard
filter:
- lowercase
- incremental_filter
managers:
default:
index:
hosts:
- %elastic_host%:%elastic_port%
index_name: index
analysis:
analyzer:
- incrementalAnalyzer
filter:
- incremental_filter
mappings:
- AppBundle
但我没有得到想要的结果。任何人都可以帮助我吗?过滤器和分析器有什么区别?我正在使用 MultiMatchQuery,因为我想在不同类型的不同字段中进行搜索:
$multiMatchQuery =
new MultiMatchQuery(
[
'name^12',
'product_name^8',
'itemno^18',
'number^7',
'category^6',
'company^4',
'motor^3',
'chassis^13',
'engine^14',
'description'
],
$term
);
$search->addQuery($multiMatchQuery);
我还尝试定义“not_analyzed”字段。
希望得到您的帮助!
谢谢。