null+****@clear*****
null+****@clear*****
2012年 7月 9日 (月) 18:45:58 JST
SHIMODA Hiroshi 2012-07-09 18:45:58 +0900 (Mon, 09 Jul 2012) New Revision: e9c5f20cae474f394c319ce6899733242d3b6c72 https://github.com/groonga/gcs/commit/e9c5f20cae474f394c319ce6899733242d3b6c72 Log: Support literal type index fields Modified files: lib/api/2011-02-01/configuration.js test/api-configuration.test.js Modified: lib/api/2011-02-01/configuration.js (+22 -12) =================================================================== --- lib/api/2011-02-01/configuration.js 2012-07-09 18:17:53 +0900 (08c8e8e) +++ lib/api/2011-02-01/configuration.js 2012-07-09 18:45:58 +0900 (dd061ff) @@ -162,6 +162,16 @@ function createIndexFieldOptionStatus(options) { return '<UIntOptions>' + '<DefaultValue/>' + '</UIntOptions>'; + case 'literal': + return '<LiteralOptions>' + + '<DefaultValue/>' + + '<FacetEnabled>' + (options.facetEnabled || false) + + '</FacetEnabled>' + + '<ResultEnabled>' + (options.resultEnabled || false) + + '</ResultEnabled>' + + '<SearchEnabled>' + (options.searchEnabled || false) + + '</SearchEnabled>' + + '</LiteralOptions>'; } } @@ -207,14 +217,8 @@ handlers.DefineIndexField = function(database, request, response) { var createdAt = new Date(); var alterTableName = domain.termsTableName; var columnType = field.fieldTypeToColumnType(fieldType); + var resultEnabled = fieldType != 'literal'; try { - database.commandSync('column_create', { - table: domain.tableName, - name: field.columnName, - flags: Database.COLUMN_SCALAR, - type: columnType - }); - if (fieldType == 'uint' || fieldType == 'literal') { database.commandSync('table_create', { name: field.alterTableName, @@ -224,6 +228,12 @@ handlers.DefineIndexField = function(database, request, response) { alterTableName = field.alterTableName; } database.commandSync('column_create', { + table: domain.tableName, + name: field.columnName, + flags: Database.COLUMN_SCALAR, + type: columnType + }); + database.commandSync('column_create', { table: alterTableName, name: field.indexColumnName, flags: Database.INDEX_COLUMN_DEFAULT_FLAGS, @@ -236,7 +246,7 @@ handlers.DefineIndexField = function(database, request, response) { fieldName: fieldName, fieldType: fieldType, facetEnabled: false, - resultEnabled: true, + resultEnabled: resultEnabled, state: 'RequiresIndexDocuments', createdAt: createdAt, updatedAt: createdAt @@ -275,8 +285,8 @@ handlers.DeleteIndexField = function(database, request, response) { name: field.columnName }); - if (column.type == field.fieldTypeToColumnType('uint') || - column.type == field.fieldTypeToColumnType('literal')) { + if (column.range == field.fieldTypeToColumnType('uint') || + column.range == field.fieldTypeToColumnType('literal')) { database.commandSync('table_remove', { name: field.alterTableName }); @@ -321,8 +331,8 @@ handlers.IndexDocuments = function(database, request, response) { var fieldName = column.source[0].replace(column.range + '.', ''); var field = domain.getIndexField(fieldName); - var alterTableName = domain.termsTableName; - var fieldType = field.columnTypeToFieldType(column.type); + var fieldType = column.domain == domain.termsTableName ? 'text' : + field.columnTypeToFieldType(column.type); if (column.type == field.fieldTypeToColumnType('uint') || column.type == field.fieldTypeToColumnType('literal')) { Modified: test/api-configuration.test.js (+129 -0) =================================================================== --- test/api-configuration.test.js 2012-07-09 18:17:53 +0900 (0b4d6a4) +++ test/api-configuration.test.js 2012-07-09 18:45:58 +0900 (68b60c3) @@ -270,6 +270,76 @@ suite('Configuration API', function() { }); }); + test('Get, Action=DefineIndexField (literal)', function(done) { + var path = '/?DomainName=companies&Action=CreateDomain&Version=2011-02-01'; + utils.get(path, { + 'Host': 'cloudsearch.localhost' + }) + .next(function(response) { + var path = '/?DomainName=companies&IndexField.IndexFieldName=member&' + + 'IndexField.IndexFieldType=literal&' + + 'Action=DefineIndexField&Version=2011-02-01'; + return utils.get(path); + }) + .next(function(response) { + var expected = { + statusCode: 200, + body: '<?xml version="1.0"?>\n' + + '<DefineIndexFieldResponse xmlns="' + XMLNS + '">' + + '<DefineIndexFieldResult>' + + '<IndexField>' + + '<Options>' + + '<IndexFieldName>member</IndexFieldName>' + + '<IndexFieldType>literal</IndexFieldType>' + + '<LiteralOptions>' + + '<DefaultValue/>' + + '<FacetEnabled>false</FacetEnabled>' + + '<ResultEnabled>false</ResultEnabled>' + + '<SearchEnabled>false</SearchEnabled>' + + '</LiteralOptions>' + + '</Options>' + + '<Status>' + + '<CreationDate>1970-01-01T00:00:00Z</CreationDate>' + + '<State>RequiresIndexDocuments</State>' + + '<UpdateDate>1970-01-01T00:00:00Z</UpdateDate>' + + '<UpdateVersion>0</UpdateVersion>' + + '</Status>' + + '</IndexField>' + + '</DefineIndexFieldResult>' + + '<ResponseMetadata>' + + '<RequestId></RequestId>' + + '</ResponseMetadata>' + + '</DefineIndexFieldResponse>' + }; + var actual = { + statusCode: response.statusCode, + body: response.body + .replace(/\d{4}-\d{2}-\d{2}T\d{2}:\d{2}:\d{2}Z/g, + '1970-01-01T00:00:00Z') + }; + assert.deepEqual(actual, expected); + + var dump = database.commandSync('dump', { + tables: 'companies' + }); + var expected = 'table_create companies TABLE_HASH_KEY ShortText\n' + + 'table_create companies_BigramTerms ' + + 'TABLE_PAT_KEY|KEY_NORMALIZE ShortText ' + + '--default_tokenizer TokenBigram\n' + + 'table_create companies_member ' + + 'TABLE_HASH_KEY ShortText\n' + + 'column_create companies_member companies_member ' + + 'COLUMN_INDEX|WITH_POSITION companies member\n' + + 'column_create companies member COLUMN_SCALAR companies_member'; + assert.equal(dump, expected); + + done(); + }) + .error(function(error) { + done(error); + }); + }); + test('Get, Action=DeleteIndexField (text)', function(done) { var path = '/?DomainName=companies&Action=CreateDomain&Version=2011-02-01'; utils.get(path, { @@ -368,6 +438,55 @@ suite('Configuration API', function() { }); }); + test('Get, Action=DeleteIndexField (literal)', function(done) { + var path = '/?DomainName=companies&Action=CreateDomain&Version=2011-02-01'; + utils.get(path, { + 'Host': 'cloudsearch.localhost' + }) + .next(function(response) { + var path = '/?DomainName=companies&IndexField.IndexFieldName=member&' + + 'IndexField.IndexFieldType=literal&' + + 'Action=DefineIndexField&Version=2011-02-01'; + return utils.get(path); + }) + .next(function(response) { + var path = '/?DomainName=companies&IndexFieldName=member&' + + 'Action=DeleteIndexField&Version=2011-02-01'; + return utils.get(path); + }) + .next(function(response) { + var expected = { + statusCode: 200, + body: '<?xml version="1.0"?>\n' + + '<DeleteIndexFieldResponse xmlns="' + XMLNS + '">' + + '<DeleteIndexFieldResult/>' + + '<ResponseMetadata>' + + '<RequestId></RequestId>' + + '</ResponseMetadata>' + + '</DeleteIndexFieldResponse>' + }; + var actual = { + statusCode: response.statusCode, + body: response.body + }; + assert.deepEqual(actual, expected); + + var dump = database.commandSync('dump', { + tables: 'companies' + }); + var expected = 'table_create companies TABLE_HASH_KEY ShortText\n' + + 'table_create companies_BigramTerms ' + + 'TABLE_PAT_KEY|KEY_NORMALIZE ShortText ' + + '--default_tokenizer TokenBigram'; + assert.equal(dump, expected); + + done(); + }) + .error(function(error) { + done(error); + }); + }); + test('Get, Action=IndexDocuments', function(done) { var path = '/?DomainName=companies&Action=CreateDomain&Version=2011-02-01'; utils.get(path, { @@ -379,6 +498,12 @@ suite('Configuration API', function() { return utils.get(path); }) .next(function(response) { + var path = '/?DomainName=companies&IndexField.IndexFieldName=age&' + + 'IndexField.IndexFieldType=uint&' + + 'Action=DefineIndexField&Version=2011-02-01'; + return utils.get(path); + }) + .next(function(response) { var path = '/?DomainName=companies&' + 'Action=IndexDocuments&Version=2011-02-01'; return utils.get(path); @@ -408,10 +533,14 @@ suite('Configuration API', function() { tables: 'companies' }); var expected = 'table_create companies TABLE_HASH_KEY ShortText\n' + + 'column_create companies age COLUMN_SCALAR UInt32\n' + 'column_create companies name COLUMN_SCALAR ShortText\n' + 'table_create companies_BigramTerms ' + 'TABLE_PAT_KEY|KEY_NORMALIZE ShortText ' + '--default_tokenizer TokenBigram\n' + + 'table_create companies_age TABLE_HASH_KEY UInt32\n' + + 'column_create companies_age companies_age ' + + 'COLUMN_INDEX|WITH_POSITION companies age\n' + 'column_create companies_BigramTerms companies_name ' + 'COLUMN_INDEX|WITH_POSITION companies name'; assert.equal(dump, expected); -------------- next part -------------- HTML$B$NE:IU%U%!%$%k$rJ]4I$7$^$7$?(B...Download