我想在查询时使用不同的分析器来编写我的查询。
我从文档“Controlling Analysis”:
中读到了这一点[...]搜索时的完整序列:
- 分析器中定义的分析器,否则
- 字段映射中定义的search_analyzer,否则
- 分析器在字段映射中定义,否则
- 分析器在索引设置中命名为default_search,默认为
- 分析器在索引设置中命名为default,默认为
- 标准分析仪
但我不知道如何编写查询以便为不同的子句指定不同的分析器:
"query" => [
"bool" => [
"must" => [
{
"match": ["my_field": "My query"]
"<ANALYZER>": <ANALYZER_1>
}
],
"should" => [
{
"match": ["my_field": "My query"]
"<ANALYZER>": <ANALYZER_2>
}
]
]
]
我知道我可以索引两个或更多不同的字段,但我有强大的辅助内存限制,我不能将相同的信息索引N次。
谢谢
答案 0 :(得分:5)
如果还没有,您首先需要将自定义分析器映射到索引设置端点。
注意:如果索引存在且正在运行,请务必先关闭它。
POST /my_index/_close
然后将自定义分析仪映射到设置端点。
PUT /my_index/_settings
{
"settings": {
"analysis": {
"analyzer": {
"custom_analyzer1": {
"type": "standard",
"stopwords_path": "stopwords/stopwords.txt"
},
"custom_analyzer2": {
"type": "standard",
"stopwords": ["stop", "words"]
}
}
}
}
}
再次打开索引。
POST /my_index/_open
现在,您可以使用新的分析器查询索引。
GET /my_index/_search
{
"query": {
"bool": {
"should": [{
"match": {
"field_1": {
"query": "Hello world",
"analyzer": "custom_analyzer1"
}
}
}],
"must": [{
"match": {
"field_2": {
"query": "Stop words can be tough",
"analyzer": "custom_analyzer2"
}
}
}]
}
}
}