Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/url/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Elasticsearch查询按术语拆分URL_Url_<img Src="//i.stack.imgur.com/RUiNP.png" Height="16" Width="18" Alt="" Class="sponsor Tag Img">elasticsearch_Tokenize_Analysis - Fatal编程技术网 elasticsearch,tokenize,analysis,Url,elasticsearch,Tokenize,Analysis" /> elasticsearch,tokenize,analysis,Url,elasticsearch,Tokenize,Analysis" />

Elasticsearch查询按术语拆分URL

Elasticsearch查询按术语拆分URL,url,elasticsearch,tokenize,analysis,Url,elasticsearch,Tokenize,Analysis,在Elasticsearch中,我想查询术语,并从URL获取结果。因此,我试图让字段“url”按以下方式进行分析和查询,但结果总是空的 index config.json: { "mappings": { "Mytype": { "properties": { "about": { "url": { "type": "string", "analyzer":"url_analyzer"

在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": "[\\.:/]+"
}}}}}
{
  "query": {
    "bool": {
      "must": [{
          "query_string": {
            "default_field": "Mytype.url",
            "query": "myquery"
      }}],
      "must_not": [],
      "should": []
  }},
  "from": 0,
  "size": 10,
  "sort": [],
  "facets": {}
}
在head插件中查询:

{
  "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": "[\\.:/]+"
}}}}}
{
  "query": {
    "bool": {
      "must": [{
          "query_string": {
            "default_field": "Mytype.url",
            "query": "myquery"
      }}],
      "must_not": [],
      "should": []
  }},
  "from": 0,
  "size": 10,
  "sort": [],
  "facets": {}
}
(我也通过Java API进行了一些不同的查询——同样的问题也出现了。)

结果:

{
  "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": "[\\.:/]+"
}}}}}
{
  "query": {
    "bool": {
      "must": [{
          "query_string": {
            "default_field": "Mytype.url",
            "query": "myquery"
      }}],
      "must_not": [],
      "should": []
  }},
  "from": 0,
  "size": 10,
  "sort": [],
  "facets": {}
}
现在,如果我把例如
stackoverflow.com
作为我的查询,这就行了。
但是如果我只取
stackoverflow
,结果是空的

这让我感到困惑,因为我认为url_标记器的模式应该将
作为一个限制器


这里出了什么问题?

我在寻找elasticsearch分析器时遇到了这个问题,在那里我可以搜索
stackoverflow
stackoverflow.com
。我也认为您的模式标记器看起来应该可以工作,但对我来说也不行。我没有去探究为什么没有,而是使用了一种内置的方法,将所有非字母字符上的标记分割开来,这对于URL中包含非字母字符的域来说并不完美,但对于我的用例来说已经足够好了。我还过滤了
http
https
标记,因此单独搜索这两个标记都不会返回所有结果,而是搜索
http://stackoverflow.com
仍然有效

"analysis": {
  "filter": {
    "url_stop": {
      "type": "stop",
      "stopwords": ["http", "https"]
    }
  },
  "analyzer": {
    "url_analyzer": {
        "tokenizer": "lowercase",
        "filter": "url_stop"
    }
  }
}
并在映射中使用它:

"mappings": {
  "my_mapping": {
    "properties": {
      "url": {
        "analyzer": "url_analyzer",
        "type": "string"
      }
    }
  }
}

希望OP已经解决了他们的问题,但这可能对将来的其他人有用。

我也是在寻找elasticsearch analyzer时遇到这个问题的,我可以在那里搜索
stackoverflow
stackoverflow.com
。我也认为您的模式标记器看起来应该可以工作,但对我来说也不行。我没有去探究为什么没有,而是使用了一种内置的方法,将所有非字母字符上的标记分割开来,这对于URL中包含非字母字符的域来说并不完美,但对于我的用例来说已经足够好了。我还过滤了
http
https
标记,因此单独搜索这两个标记都不会返回所有结果,而是搜索
http://stackoverflow.com
仍然有效

"analysis": {
  "filter": {
    "url_stop": {
      "type": "stop",
      "stopwords": ["http", "https"]
    }
  },
  "analyzer": {
    "url_analyzer": {
        "tokenizer": "lowercase",
        "filter": "url_stop"
    }
  }
}
并在映射中使用它:

"mappings": {
  "my_mapping": {
    "properties": {
      "url": {
        "analyzer": "url_analyzer",
        "type": "string"
      }
    }
  }
}

希望OP解决了他们的问题,但这可能对将来的其他人有用。

您的映射似乎格式不正确,即我不确定“properties/about/url”字段是否正确,肯定缺少一些内容。如果
about
是一个对象字段,则必须在
properties
结构中包含
url
子字段。您能使用
curl-XGET localhost:9200/您的_索引
提取实际映射并用它更新您的问题吗?@Val感谢您的回复!这是JSON模式表示法,不应该是问题的一部分,因为搜索“stackoverflow.com”和许多其他查询将非常有效。尽管如此,我还是提取并检查了实际的映射。这与上面发布的完全相同。我将很快检查详细信息,但以下答案应该会让您领先一步:@Val我已经安装了中提到的分析url插件,日志告诉我它已安装,没有错误。重新启动ES后,我仍然会遇到以下异常:
org.elasticsearch.ElasticsearchIllegalArgumentException:未能找到[url\u host]的令牌筛选器类型[url]
==>可能是一个新问题?我本来打算提交一个关于该插件的答案,但我还没有完成:-)但从错误判断,看起来该插件显然没有安装。您是否可以确保在ES启动时在日志中看到其名称?您的映射似乎格式不正确,即我不确定“properties/about/url”字段是否正确,一定缺少某些内容。如果
about
是一个对象字段,则必须在
properties
结构中包含
url
子字段。您能使用
curl-XGET localhost:9200/您的_索引
提取实际映射并用它更新您的问题吗?@Val感谢您的回复!这是JSON模式表示法,不应该是问题的一部分,因为搜索“stackoverflow.com”和许多其他查询将非常有效。尽管如此,我还是提取并检查了实际的映射。这与上面发布的完全相同。我将很快检查详细信息,但以下答案应该会让您领先一步:@Val我已经安装了中提到的分析url插件,日志告诉我它已安装,没有错误。重新启动ES后,我仍然会遇到以下异常:
org.elasticsearch.ElasticsearchIllegalArgumentException:未能找到[url\u host]的令牌筛选器类型[url]
==>可能是一个新问题?我本来打算提交一个关于该插件的答案,但我还没有完成:-)但从错误判断,看起来该插件显然没有安装。您能确保在ES启动时在日志中看到其名称吗?