2014-02-06 2 views
0

У меня есть один документ в упругом Поиск:Elasticsearch: REST API работает, но контрагент Java не

{ 
    "accountGroupId":1000, 
    "name":"Elastic Burgers", 
    "capacity":33, 
    "startTime":1391604480000, 
    "address":{ 
     "streetName":"Rua Carlos Petit", 
     "streetNumber":"111", 
     "complement":"", 
     "neighborhood":"Vila Mariana", 
     "city":"São Paulo", 
     "state":"SP", 
     "country":"Brasil", 
     "zip":"04110000", 
     "position":{ 
     "latitude":-23.5845048, 
     "longitude":-46.6358975 
     }, 
     "accountGroupId":1000, 
     "status":[ 

     ], 
     "id":1000, 
     "createTime":1391010548111, 
     "updateTime":1391010548111 
    }, 
    "flyerUrl":"/assets/images/placeholder-merchant.png", 
    "backgroundImageUrl":"/assets/images/placeholder-merchant.png", 
    "onSaleStartTime":1391604480000, 
    "onSaleEndTime":1392990480000, 
    "description":"Lorem Ipsum", 
    "eventCategoryId":1000, 
    "deleted":false, 
    "installmentId":100, 
    "feeId":101, 
    "restricted":false, 
    "venueAccountGroupId":15, 
    "updateTime":1391691790113, 
    "createTime":1391691790113, 
    "id":1002, 
    "venue":"Acme, Inc.", 
    "category":"Festa Faculdade" 
} 

Этот REST запрос возвращает документ:

curl -XGET 'http://localhost:9200/paguemob/events/_search' -d '{ 
    "query": { 
     "multi_match" : { 
      "query" : "festa de faculdade", 
      "fields" : ["name", "address.city", "venue", "category", "description"] 
     }  
    } 
}' 

Но если я бегу эквивалент запрос через API Java, результат пуст:

client 
    .prepareSearch(index) 
    .setQuery(multiMatchQuery("festa de faculdade", "name", "address.city", "venue", "category", "description")) 
    .setSize(200) 
    .execute() 
    .actionGet() 
    .getHits 

Что я делаю неправильно?

ответ

1

Глядя на некоторые из ES test code я вижу, что в дополнение к самой multiMatchQuery они также установить OR в качестве оператора (я бы предположить, что это по умолчанию) и useDisMax к false и установите type.

searchResponse = client().prepareSearch("test") 
    .setQuery(multiMatchQuery("marvel hero captain america", "full_name", "first_name", "last_name", "category") 
    .operator(MatchQueryBuilder.Operator.OR).useDisMax(false).type(type)).get(); 

Интересно, является ли один из этих трюков?

Кроме того, ваш пример может не показывать его, но вы правильно используете массив результатов результатов в Java?

searchResponse.getHits().hits()[0] 
+0

Оператор 'OR' является стандартным, как и для утилизатора, который влияет на способ вычисления баллов, но, похоже, это не причина, по которой документ не возвращается. – javanna

0

Я заметил ошибку: я не задал тип поиска. Таким образом, добавление .setTypes("events") к вызову сделало трюк.

+0

Странно, есть ли у вас другие типы под одним и тем же индексом? – javanna

Смежные вопросы