[英]Elasticsearch - match not_analyzed field with partial search term
我有一个"name" field - not_analyzed
在我的"name" field - not_analyzed
索引中未进行分析。
可以说"name" field
值是"some name"
。 我的问题是,如果我想匹配搜索词- some name some_more_name someother name
因为它包含some name
,那么not_analyzed
允许该匹配发生,如果没有,那么我如何才能为建议的搜索找到匹配项术语?
在索引期间, name
字段的文本存储在反向索引中。 如果对该字段进行了分析,则两个术语将进入倒排索引: some
和name
。 但是,由于没有对其进行分析,因此只存储了1个术语: some name
在搜索过程中(使用匹配查询),默认情况下会对搜索查询进行分析和标记化。 因此,将有几个术语: some
, name
, some_more_name
和someother
。 然后,Elasticsearch将查看反向索引以查看搜索查询中是否至少有一个术语。 但是只有some name
术语,因此您不会在结果集中看到此文档。
您可以使用_analyze端点与分析器一起玩
返回您的问题,如果您想与建议的搜索查询匹配,则必须分析您的字段。
如果您还需要保留未分析的版本,则应使用多个字段 :
PUT my_index
{
"mappings": {
"my_type": {
"properties": {
"name": {
"type": "keyword",
"fields": {
"analyzed": {
"type": "text"
}
}
}
}
}
}
}
Taras解释清楚,我的问题可能已经解决,但是仍然无法更改索引映射,则可以使用查询(我已经在5.4 ES中进行了测试)
GET test/_search
{
"query": {
"query_string": {
"default_field": "namekey",
"query": "*some* *name*",
"default_operator": "OR"
}
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.