我有一个大型JSON文件列表(最小文件是500 Ko,最大文件是100 Mo).
我需要独立处理每个文件.我的问题是每个文件后内存使用量越来越多,即使我清除了所有内存.
例:
foreach ($files as $file) {
json_decode(file_get_contents($file->getRealpath()), true);
$memory = memory_get_usage(true);
echo 'Memory: '.@round($memory / pow(1024,($i=floor(log($memory, 1024)))), 2).' '.['b', 'kb', 'mb', 'gb', 'tb', 'pb'][$i]."\n";
gc_collect_cycles();
}
Run Code Online (Sandbox Code Playgroud)
结果:
Memory: 6 mb
(...)
Memory: 6 mb
Memory: 6 mb
Memory: 10 mb
Memory: 10 mb
Memory: 10 mb
(...)
Memory: 12 mb
Memory: 12 mb
Memory: 12 mb
(...)
Memory: 490 mb
Memory: 490 mb
Memory: 490 mb
(...)
Memory: 946 mb
Memory: 944 mb
Memory: 944 mb …Run Code Online (Sandbox Code Playgroud) 我使用Elasticsearch使用ngram过滤器进行自动完成搜索.如果它以search关键字开头,我需要提升结果.
我的查询很简单:
"query": {
"match": {
"query": "re",
"operator": "and"
}
}
Run Code Online (Sandbox Code Playgroud)
这是我的结果:
但我希望他们这样:
如何从关键字开始提升结果?
万一它可以帮助,这是我的映射:
{
"settings": {
"analysis": {
"analyzer": {
"partialAnalyzer": {
"type": "custom",
"tokenizer": "ngram_tokenizer",
"filter": ["asciifolding", "lowercase"]
},
"searchAnalyzer": {
"type": "custom",
"tokenizer": "standard",
"filter": ["asciifolding", "lowercase"]
}
},
"tokenizer": {
"ngram_tokenizer": {
"type": "edge_ngram",
"min_gram": "1",
"max_gram": "15",
"token_chars": [ "letter", "digit" ]
}
}
}
},
"mappings": {
"place": …Run Code Online (Sandbox Code Playgroud) 我的服务/文件夹中的某个地方有一个异常,Symfony 正在尝试自动装配它:
无法自动装配服务“App\Service\Order\Exception\StripeRequiresActionException”:方法“__construct()”的参数“$secretKey”是类型提示的“string”,您应该明确配置其值。
这是我的课:
class StripeRequiresActionException extends \Exception
{
/**
* @var string
*/
protected $secretKey;
public function __construct(string $secretKey)
{
parent::__construct();
$this->secretKey = $secretKey;
}
/**
* @return string
*/
public function getSecretKey(): string
{
return $this->secretKey;
}
}
Run Code Online (Sandbox Code Playgroud)
我不希望它被自动装配。有没有一种简单的方法来防止这个类被 DI 加载,例如带有注释?我知道我可以在我的 yaml 配置中排除这个类,但我不想这样做,因为我觉得这很丑陋且难以维护。