分析带有前导连字符_analyze端点的文本

时间:2015-12-23 10:20:02

标签: elasticsearch

使用elasticsearch分析一些文本(使用_analyze端点)。

我看到当有前导连字符时它不会返回json,而是返回其他格式。

尝试搜索有关此内容的文档,但一无所获。 有人能指出我的原因吗?有没有办法强制json输出?以下示例。

感谢。

简短的例子,一个文本是“这是”,另一个是'---------这是'。

这很好用:

% curl -XGET 'localhost:9200/_analyze?analyzer=standard' -d 'this is'

{"tokens":[{"token":"this","start_offset":0,"end_offset":4,"type":"<ALPHANUM>","position":1},{"token":"is","start_offset":5,"end_offset":7,"type":"<ALPHANUM>","position":2}]}

但有领先---它会返回其他格式

% curl -XGET 'localhost:9200/_analyze?analyzer=standard' -d '---------this is'

---
tokens:
- token: "this"
  start_offset: 9
  end_offset: 13
  type: "<ALPHANUM>"
  position: 1
- token: "is"
  start_offset: 14
  end_offset: 16
  type: "<ALPHANUM>"
  position: 2

2 个答案:

答案 0 :(得分:2)

当文档没有说明时,你应该转向最终的&#34;文档&#34;资源,即代码。

从将处理_analyze调用的主RestAnalyzeAction REST端点开始,我们可以看到在第87行,它将尝试通过调用{{3来猜测请求体的内容类型}}。该方法依次调用RestActions.guessBodyContentType,后者我们可以在第156行找到原因,即如果正文以两个连字符开头,则请求被解释为YAML,响应将被格式化为YAML相应

您可以通过将-v(用于详细)开关添加到curl命令来确认此事实:

curl -v -XGET 'localhost:9200/_analyze?analyzer=standard' -d '---------this is'

您收到的回复会告诉您回复的内容类型为application/yaml

* Connected to localhost (::1) port 9200 (#0)
> GET /_analyze?analyzer=standard HTTP/1.1
> User-Agent: curl/7.37.1
> Host: localhost:9200
> Accept: */*
> Content-Length: 16
> Content-Type: application/x-www-form-urlencoded
> 
* upload completely sent off: 16 out of 16 bytes
< HTTP/1.1 200 OK
< Content-Type: application/yaml                   <---- HERE
< Content-Length: 183
< 
---
tokens:
- token: "this"
  start_offset: 9
  end_offset: 13
  type: "<ALPHANUM>"
  position: 1
- token: "is"
  start_offset: 14
  end_offset: 16
  type: "<ALPHANUM>"
  position: 2

答案 1 :(得分:0)

当我在sense插件中尝试相同时,我得到了以下结果

- (void)webViewDidFinishLoad:(UIWebView *)aWebView
{

    aWebView.scrollView.scrollEnabled = NO;
    CGRect frame = aWebView.frame;
    frame.size.height = 1;
    aWebView.frame = frame;
    CGSize fittingSize = [aWebView sizeThatFits:CGSizeZero];
    frame.size = fittingSize;
    aWebView.frame = frame;
    webViewHeight=fittingSize.height;

    [tblEventInfo reloadData];

}

- (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath
{
    return webViewHeight;
}

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
    static NSString *CellIdentifier = @"Cell";

    UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];
    if (cell == nil) {
        cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier];
    }

    EventInfo *event = [[EventInfo alloc] init];
    event = [arrayEventInfo objectAtIndex:indexPath.section];

    NSLog(@"%@", event.event_title);

    if(!webViewHTML)
    {
        webViewHTML = [[UIWebView alloc]init];
        webViewHTML.delegate = self;
        webViewHTML.backgroundColor = [UIColor clearColor];
        webViewHTML.opaque = NO;
        webViewHTML.userInteractionEnabled = NO;

        [webViewHTML loadHTMLString:event.event_html baseURL: nil];
    }

    [webViewHTML loadHTMLString:event.event_html baseURL: nil];

    webViewHTML.frame = CGRectMake(0, 0, cell.frame.size.width, webViewHeight);

    [cell.contentView addSubview:webViewHTML];

    return cell;
}