【发布时间】:2016-08-23 02:14:22
【问题描述】:
在 Elasticsearch 中,我想查询术语并从 URL 中获取结果。因此,我尝试让“url”字段按以下方式进行分析和查询-但结果始终为空。
index-config.json:
{
"mappings": {
"Mytype": {
"properties": {
"about": {
"url": {
"type": "string",
"analyzer":"url_analyzer"
}}}}},
"settings" : {
"analysis": {
"analyzer": {
"url_analyzer": {
"type": "custom",
"tokenizer": "url_tokenizer"
}
},
"tokenizer": {
"url_tokenizer" : {
"type": "pattern",
"pattern": "[\\.:/]+"
}}}}}
head-plugin 中的查询:
{
"query": {
"bool": {
"must": [{
"query_string": {
"default_field": "Mytype.url",
"query": "myquery"
}}],
"must_not": [],
"should": []
}},
"from": 0,
"size": 10,
"sort": [],
"facets": {}
}
(我也通过 Java API 进行了一些不同的查询 - 出现了同样的问题。)
结果:
现在,如果我采取例如stackoverflow.com 作为我的查询。
但是结果是空的,如果我只取stackoverflow。
这让我很困惑,因为我认为 url_tokenizer 的模式应该将. 作为限制器。
这里有什么问题?
【问题讨论】:
-
您的映射似乎格式不正确,即我不确定“properties / about / url”字段,一定缺少某些东西。如果
about是一个对象字段,那么您必须在properties结构中包含url子字段。您可以使用curl -XGET localhost:9200/your_index提取实际映射并用它更新您的问题吗? -
@Val 感谢您的回复!这是 JSON Schema 表示法,不应该是问题的一部分,因为搜索“stackoverflow.com”和许多其他查询都可以。尽管如此,我还是提取并检查了实际映射。和上面贴的完全一样。
-
我会尽快检查详细信息,但以下答案应该可以让您抢先一步:stackoverflow.com/questions/34887458/…
-
@Val 我已经安装了 stackoverflow.com/a/34986008/4420271 中提到的分析 url 插件,并且日志告诉我它已经安装且没有错误。重启 ES 后,还是出现如下异常:
org.elasticsearch.ElasticsearchIllegalArgumentException: failed to find token filter type [url] for [url_host]。 ==> 也许是一个新问题? -
我打算提交一个使用该插件的答案,但我还没有完成 :-) 但是从错误来看,它看起来似乎没有明显安装插件。你能确保在 ES 启动时看到它的名字出现在日志中吗?
标签: url elasticsearch tokenize analysis