Кажется, что, оборачивая запрос (объект BoolQueryBuilder), передавая его в качестве аргумента boolQuery (). Filter (..), а затем устанавливая его в setQuery (), как вы предложили, - тогда это может быть достигнутым. Клавиша «оценка» в ответе всегда 0 (хотя документы найдены)
Будьте осторожны! Если оценка равна 0, оценка была рассчитана. Это означает, что запрос все еще находится в контексте запроса, а не в контексте фильтра. В контексте фильтра оценка устанавливается на 1,0 (без расчета) источник
Чтобы создать запрос в контексте фильтра без расчета оценки (оценка = 1,0), выполните следующие действия (возможно, имеется еще лучше?):
QueryBuilder qb = QueryBuilders.constantScoreQuery(QueryBuilders.boolQuery().must(QueryBuilders.matchQuery("name", "blub)));
Это возвращает те же результаты, как:
GET /indexName/typeName/_search { "filter": { "query": { "bool": { "must": [ { "match": { "name": "blub" }} ] } } } }
Если вам не нужны значения в реальном веб-приложении, может помочь скрипт groovy:
import javax.management.remote.*
import javax.management.*
import groovy.jmx.builder.*
// Setup JMX connection.
def connection = new JmxBuilder().client(port: 4934, host: '192.168.10.6')
connection.connect()
// Get the MBeanServer.
def mbeans = connection.MBeanServerConnection
def activeBean = new GroovyMBean(mbeans, 'Catalina:type=Manager,host=localhost,context=/')
println "Active sessions: " + activeBean['activeSessions']
Если вы хотите использовать реальные сессии, у вас есть методы для их получения, например:
def sessions = activeBean.listSessionIds().tokenize(' ');
Нет способа получить счетчик сеансов напрямую от tomcat. Но вы можете создать и зарегистрировать слушатель сеанса и увеличить счетчик при его создании. Вот пример:
http://tomcat-configure.blogspot.com/2009/01/tomcat-session-listener-example.html
public class SessionCounter implements HttpSessionListener {
private static int activeSessions = 0;
public void sessionCreated(HttpSessionEvent se) {
activeSessions++;
}
public void sessionDestroyed(HttpSessionEvent se) {
if(activeSessions > 0)
activeSessions--;
}
public static int getActiveSessions() {
return activeSessions;
}
}
Вы можете присоединить jolokia jvm agent к запущенному tomcat и запросить атрибут activeSessions
из соответствующих MBeans с помощью curl.
java -jar agent.jar start [TOMCAT-PID]
curl 'http://127.0.0.1:8778/jolokia/read/Catalina:context=*,host=*,type=Manager/activeSessions'
java -jar agent.jar stop [TOMCAT-PID]
Это даст вам что-то вроде
{
"request":{
"mbean":"Catalina:context=*,host=*,type=Manager",
"attribute":"activeSessions",
"type":"read"
},
"value":{
"Catalina:context=\/SampleApp,host=localhost,type=Manager":{
"activeSessions":1
}
},
"timestamp":1553105659,
"status":200
}