我的弹性搜索索引中有"name" field - not_analyzed
。
假设"name" field
的值为"some name"
。我的问题是,如果我想要匹配搜索字词some name some_more_name someother name
,因为其中包含some name
,那么not_analyzed
会允许匹配发生,如果不是,那我该怎么办?得到匹配的建议搜索词?
答案 0 :(得分:2)
在索引期间,name
字段的文本存储在倒排索引中。如果分析了此字段,则会将2个字词转到倒排索引:some
和name
。但由于未进行分析,因此只存储了1个术语:some name
在搜索过程中(使用匹配查询),默认情况下会对搜索查询进行分析和标记。因此,会有几个术语:some
,name
,some_more_name
和someother
。然后Elasticsearch将查看倒排索引,以查看搜索查询中是否至少有一个术语。但是只有some name
个术语,因此您无法在结果集中看到此文档
您可以使用_analyze端点
回到您的问题,如果您想获得建议的搜索查询的匹配项,则必须分析您的字段。
如果您还需要保留未经过分析的版本,则应使用multi fields:
PUT my_index
{
"mappings": {
"my_type": {
"properties": {
"name": {
"type": "keyword",
"fields": {
"analyzed": {
"type": "text"
}
}
}
}
}
}
}
答案 1 :(得分:0)
Taras已经解释清楚了,我的问题可能已经解决了,但是如果你不能改变索引的映射,你可以使用查询(我在5.4 ES中测试过)
GET test/_search
{
"query": {
"query_string": {
"default_field": "namekey",
"query": "*some* *name*",
"default_operator": "OR"
}
}