ElasticSearch分析领域(ElasticSearch analyzed fields)

2019-10-20 18:40发布

我建立我的搜索,但需要分析不同的分析仪1场。 我的问题是一个字段,我需要有它的分析仪所产生雪球,然后又一个,以保持完整的单词作为一个令牌(关键字)。 我能得到这个通过以下指标设置工作:

curl -X PUT "http://localhost:9200/$IndexName/" -d '{
    "settings":{
        "analysis":{
            "analyzer":{
                "analyzer1":{
                    "type":"custom",
                    "tokenizer":"keyword",
                    "filter":[ "standard", "lowercase", "stop", "snowball", "my_synonyms" ]
                }
            }
        },
        "filter": {
          "my_synonyms": {
           "type": "synonym",
           "synonyms_path ": "synonyms.txt"
          }
        }
      }
    },
    "mappings": {
        "product": {
            "properties": {
                "title": {
                    "type": "string",
                    "search_analyzer" : "analyzer1",
                    "index_analyzer" : "analyzer1"
                }
            }
        }
    }
}';

在标题字段中的一个单词搜索时,问题就来了。 如果它与帽子的猫人口将它保存为“戴帽子的猫”,但如果我搜索猫我什么也没得到恢复。

这甚至可能完成或者我需要有2个独立的领域和分析一个与关键字和其他与雪球?

我使用的是窝在VB代码索引数据,如果该事项。

感谢罗伯特

Answer 1:

您可以使用应用两种不同的分析仪相同的fields属性(以前称为多场 )。

我的VB.NET是有点生疏,所以我希望你不介意C#示例。 如果你正在使用来自Dev分支的最新代码, Fields刚添加到每个核映射描述符,所以你现在可以这样做:

client.Map<Foo>(m => m
    .Properties(props => props
        .String(s => s
            .Name(o => o.Bar)
            .Analyzer("keyword")
            .Fields(fs => fs
                .String(f => f
                    .Name(o => o.Bar.Suffix("stemmed"))
                    .Analyzer("snowball")
                )
            )
        )
    )
);

否则,如果你使用NEST 1.0.2或更早版本(你可能是),您必须通过以上才能做到这一点multi field型方式:

client.Map<Foo>(m => m
    .Properties(props => props
        .MultiField(mf => mf
            .Name(o => o.Bar)
            .Fields(fs => fs
                .String(s => s
                    .Name(o => o.Bar)
                    .Analyzer("keyword"))
                .String(s => s
                    .Name(o => o.Bar.Suffix("stemmed"))
                    .Analyzer("snowball"))
            )
        )
    )
);

这两种方式是通过Elasticsearch支持,并会做同样的事情。 施加所述keyword分析器到主bar字段和snowball分析器到bar.stemmed字段。 stemmed当然只是我选择了这些示例中的后缀,你可以使用你想用的任何后缀名。 其实,你并不需要添加一个后缀,您可以命名多领域的东西比一次场完全不同。



文章来源: ElasticSearch analyzed fields