1
我在雲模式下配置Solr,並且想要配置自定義查詢解析器。 來配置它我正在使用PowerShell腳本,如下所示。如何配置Solr自定義查詢解析器?
# Variables ###########
$hostName = 'localhost'
$port = 8983
$numberOfShards = 1
$replicationFactor = 1
# These should be picked from an external file
$collections = 'Collection1', 'Collection2', 'Collection3', 'Collection4', 'Collection5', 'Collection6', 'Collection7', 'Collection8', 'Collection9';
#######################
# Following 3 commands needs file system access and can be extracted out of this script in case we want to use already hosted Solr instance on cloud
# Start Solr in Cloud Mode
'####### Starting Solr #######';
..\bin\solr start -c -h $hostName -p $port "-Denable.runtime.lib=true"
# Upload configuration to ZooKeeper
# We need to upload multiple copies of the configuration to the ZooKeeper one for each collection, so each collection can have it's different schema
$zooKeeperPort = $port + 1000;
foreach ($c in $collections) {
$configName = $c + 'SearchConfig';
'####### Uploading Config to ZooKeeper for collection {0} #######' -f $c;
$configPath = './xuber_basic_config/conf/';
..\server\scripts\cloud-scripts\zkcli.bat -zkhost localhost:$zooKeeperPort -cmd upconfig -confdir $configPath -confname $configName;
}
$urlPrefix = 'http://' + $hostName + ':' + $port + '/solr';
function PostToSolr
{
'HTTP POST: {0}' -f $args[0];
Invoke-WebRequest -uri $args[0] -Method POST -ContentType "application/json" -Body $args[1];
}
function GetToSolr
{
'HTTP GET: {0}' -f $args[0];
Invoke-WebRequest -uri $args[0] -Method GET -ContentType "application/json";
}
function PostSchema
{
$schemaFileName = $args[0];
$url = $args[1];
$jsonToPost = Get-Content ./$schemaFileName;
PostToSolr $url $jsonToPost;
}
# Get a list of collections already present in Solr
$readCollectionUrl = $urlPrefix + '/admin/collections?action=LIST&wt=json';
$alreadyExistingCollections = ((GetToSolr $readCollectionUrl).Content | ConvertFrom-Json).collections;
# Create .system collection
$systemCollectionName = '.system';
If ($alreadyExistingCollections -contains $systemCollectionName) {
$deleteCollectionUrl = $urlPrefix + '/admin/collections?action=DELETE&name={0}' -f $systemCollectionName;
GetToSolr $deleteCollectionUrl;
}
$addSystemCollectionPath = $urlPrefix + '/admin/collections?action=CREATE&name=' + $systemCollectionName;
GetToSolr $addSystemCollectionPath;
$dataSecurityPlugin = 'customQueryPlugin';
$addBlobPath = $urlPrefix + '/'+ $systemCollectionName + '/blob/' + $dataSecurityPlugin;
'HTTP POST: {0}' -f $addBlobPath;
Invoke-WebRequest -uri $addBlobPath -Method Post -InFile .\customQueryPlugin.jar -ContentType application/octet-stream;
$createCollectionPrefix = $urlPrefix + '/admin/collections?action=CREATE&name={0}&numShards={1}&replicationFactor={2}&collection.configName={3}';
$schemaApiUrlPrefix = $urlPrefix + '/{0}/schema';
# Create Solr Collections
foreach ($c in $collections) {
# Check to see if the collection already exists, if yes, delete it.
If ($alreadyExistingCollections -contains $c) {
'####### Collection {0} already present hence deleting it #######' -f $c
$deleteCollectionUrl = $urlPrefix + '/admin/collections?action=DELETE&name={0}' -f $c;
GetToSolr $deleteCollectionUrl;
}
'####### Creating collection {0} #######' -f $c;
$configName = $c + 'SearchConfig';
$tempPath = $createCollectionPrefix -f $c,$numberOfShards,$replicationFactor,$configName;
GetToSolr $tempPath;
# Add data security plugin to runtime
$addToRuntimePath = $urlPrefix + '/'+ $c + '/config';
$runtimeJsonData = @{"add-runtimelib" = @{name = "customQueryPlugin"; version = 1}} | ConvertTo-Json;
$runtimeJsonData;
PostToSolr $addToRuntimePath $runtimeJsonData;
$schemaAddUrl = $schemaApiUrlPrefix -f $c;
# Push the common Schema
'####### Adding common schema for collection {0} #######' -f $c;
$schemaFileName = 'Common_Schema.json';
PostSchema $schemaFileName $schemaAddUrl;
# Push the Schema specific to the collection
'####### Adding specific schema for collection {0} #######' -f $c;
$schemaFileName = $c + '_Schema.json';
PostSchema $schemaFileName $schemaAddUrl;
# Register QueryParser
$addQueryParserPath = $addToRuntimePath;
$addQueryParserData = @{"create-queryparser" = @{name = "acl"; runtimeLib = $true; class = "customQueryPlugin.customSearchQueryParser"}} | ConvertTo-Json;
PostToSolr $addQueryParserPath $addQueryParserData;
}
我使用edismax,並能夠搜索到我的數據,而無需過濾查詢 但過濾器查詢它沒有給出任何數據,你能告訴我是否失去了一些東西?
$ true是powershell的東西,因爲它不明白,也檢查過插件的名稱。 –
這個腳本運行後有輸出嗎?任何錯誤/例外? –