__ImageBase
сгенерированный символ компоновщика, который является заголовком DOS модуля (только MSVC). От этого можно бросить его адрес к HINSTANCE
или HMODULE
. Таким образом, это более удобно, чем прохождение через API.
, Таким образом, просто необходимо сделать это:
EXTERN_C IMAGE_DOS_HEADER __ImageBase;
#define HINST_THISCOMPONENT ((HINSTANCE)&__ImageBase)
От https://devblogs.microsoft.com/oldnewthing/20041025-00/? p=37483
Это часть SDK (.NET, или теперь Windows SDK )
[10-13] преобразуется в логический запрос+(price:10 price:11 price:12 price:13)
, предполагая, что все значения 10-13 существуют в индексе.
Полагаю, все ваши 1300 значений попадают в указанный вами диапазон. Таким образом, логический запрос содержит 1300 предложений, что выше значения по умолчанию 1024. В тестовом индексе предел 1024 не достигается, поскольку есть только 950 значений.
У меня была такая же проблема. Мое решение заключалось в том, чтобы поймать BooleanQuery.TooManyClauses и динамически увеличить maxClauseCount.
Вот код, похожий на тот, что у меня в производстве.
Удачи, Randy
private static Hits searchIndex(Searcher searcher, Query query)
throws IOException
{
boolean retry = true;
while (retry)
{
try
{
retry = false;
Hits myHits = searcher.search(query);
return myHits;
}
catch (BooleanQuery.TooManyClauses e)
{
// Double the number of boolean queries allowed.
// The default is in org.apache.lucene.search.BooleanQuery and is 1024.
String defaultQueries = Integer.toString(BooleanQuery.getMaxClauseCount());
int oldQueries = Integer.parseInt(System.getProperty("org.apache.lucene.maxClauseCount", defaultQueries));
int newQueries = oldQueries * 2;
log.error("Too many hits for query: " + oldQueries + ". Increasing to " + newQueries, e);
System.setProperty("org.apache.lucene.maxClauseCount", Integer.toString(newQueries));
BooleanQuery.setMaxClauseCount(newQueries);
retry = true;
}
}
}