Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Support
Submit feedback
Sign in
Toggle navigation
S
solarium
Project overview
Project overview
Details
Activity
Releases
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Commits
Open sidebar
common
solarium
Commits
87641c84
Commit
87641c84
authored
Oct 18, 2016
by
Bas de Nooijer
Committed by
GitHub
Oct 18, 2016
Browse files
Options
Browse Files
Download
Plain Diff
Merge pull request #452 from MyHammer/nested_documents
add basic support for nested documents
parents
75113025
b6c66a86
Changes
2
Show whitespace changes
Inline
Side-by-side
Showing
2 changed files
with
117 additions
and
49 deletions
+117
-49
library/Solarium/QueryType/Update/RequestBuilder.php
library/Solarium/QueryType/Update/RequestBuilder.php
+43
-16
tests/Solarium/Tests/QueryType/Update/RequestBuilderTest.php
tests/Solarium/Tests/QueryType/Update/RequestBuilderTest.php
+74
-33
No files found.
library/Solarium/QueryType/Update/RequestBuilder.php
View file @
87641c84
...
@@ -131,13 +131,7 @@ class RequestBuilder extends BaseRequestBuilder
...
@@ -131,13 +131,7 @@ class RequestBuilder extends BaseRequestBuilder
foreach
(
$doc
->
getFields
()
as
$name
=>
$value
)
{
foreach
(
$doc
->
getFields
()
as
$name
=>
$value
)
{
$boost
=
$doc
->
getFieldBoost
(
$name
);
$boost
=
$doc
->
getFieldBoost
(
$name
);
$modifier
=
$doc
->
getFieldModifier
(
$name
);
$modifier
=
$doc
->
getFieldModifier
(
$name
);
if
(
is_array
(
$value
))
{
$xml
.=
$this
->
buildFieldsXml
(
$name
,
$boost
,
$value
,
$modifier
,
$query
);
foreach
(
$value
as
$multival
)
{
$xml
.=
$this
->
buildFieldXml
(
$name
,
$boost
,
$multival
,
$modifier
,
$query
);
}
}
else
{
$xml
.=
$this
->
buildFieldXml
(
$name
,
$boost
,
$value
,
$modifier
,
$query
);
}
}
}
$version
=
$doc
->
getVersion
();
$version
=
$doc
->
getVersion
();
...
@@ -164,10 +158,10 @@ class RequestBuilder extends BaseRequestBuilder
...
@@ -164,10 +158,10 @@ class RequestBuilder extends BaseRequestBuilder
{
{
$xml
=
'<delete>'
;
$xml
=
'<delete>'
;
foreach
(
$command
->
getIds
()
as
$id
)
{
foreach
(
$command
->
getIds
()
as
$id
)
{
$xml
.=
'<id>'
.
htmlspecialchars
(
$id
,
ENT_NOQUOTES
,
'UTF-8'
)
.
'</id>'
;
$xml
.=
'<id>'
.
htmlspecialchars
(
$id
,
ENT_NOQUOTES
,
'UTF-8'
)
.
'</id>'
;
}
}
foreach
(
$command
->
getQueries
()
as
$query
)
{
foreach
(
$command
->
getQueries
()
as
$query
)
{
$xml
.=
'<query>'
.
htmlspecialchars
(
$query
,
ENT_NOQUOTES
,
'UTF-8'
)
.
'</query>'
;
$xml
.=
'<query>'
.
htmlspecialchars
(
$query
,
ENT_NOQUOTES
,
'UTF-8'
)
.
'</query>'
;
}
}
$xml
.=
'</delete>'
;
$xml
.=
'</delete>'
;
...
@@ -239,7 +233,7 @@ class RequestBuilder extends BaseRequestBuilder
...
@@ -239,7 +233,7 @@ class RequestBuilder extends BaseRequestBuilder
$value
=
$query
->
getHelper
()
->
formatDate
(
$value
);
$value
=
$query
->
getHelper
()
->
formatDate
(
$value
);
}
}
$xml
=
'<field name="'
.
$name
.
'"'
;
$xml
=
'<field name="'
.
$name
.
'"'
;
$xml
.=
$this
->
attrib
(
'boost'
,
$boost
);
$xml
.=
$this
->
attrib
(
'boost'
,
$boost
);
$xml
.=
$this
->
attrib
(
'update'
,
$modifier
);
$xml
.=
$this
->
attrib
(
'update'
,
$modifier
);
if
(
$value
===
null
)
{
if
(
$value
===
null
)
{
...
@@ -250,9 +244,42 @@ class RequestBuilder extends BaseRequestBuilder
...
@@ -250,9 +244,42 @@ class RequestBuilder extends BaseRequestBuilder
$value
=
'true'
;
$value
=
'true'
;
}
}
$xml
.=
'>'
.
htmlspecialchars
(
$value
,
ENT_NOQUOTES
,
'UTF-8'
);
$xml
.=
'>'
.
htmlspecialchars
(
$value
,
ENT_NOQUOTES
,
'UTF-8'
);
$xml
.=
'</field>'
;
$xml
.=
'</field>'
;
return
$xml
;
return
$xml
;
}
}
/**
* @param string $key
*
* @param float $boost
* @param mixed $value
* @param string $modifier
* @param UpdateQuery $query
* @return string
*/
private
function
buildFieldsXml
(
$key
,
$boost
,
$value
,
$modifier
,
$query
)
{
$xml
=
''
;
if
(
is_array
(
$value
))
{
foreach
(
$value
as
$multival
)
{
if
(
is_array
(
$multival
))
{
$xml
.=
'<doc>'
;
foreach
(
$multival
as
$k
=>
$v
)
{
$xml
.=
$this
->
buildFieldsXml
(
$k
,
$boost
,
$v
,
$modifier
,
$query
);
}
$xml
.=
'</doc>'
;
}
else
{
$xml
.=
$this
->
buildFieldXml
(
$key
,
$boost
,
$multival
,
$modifier
,
$query
);
}
}
}
else
{
$xml
.=
$this
->
buildFieldXml
(
$key
,
$boost
,
$value
,
$modifier
,
$query
);
}
return
$xml
;
}
}
}
tests/Solarium/Tests/QueryType/Update/RequestBuilderTest.php
View file @
87641c84
...
@@ -31,15 +31,15 @@
...
@@ -31,15 +31,15 @@
namespace
Solarium\Tests\QueryType\Update
;
namespace
Solarium\Tests\QueryType\Update
;
use
Solarium\QueryType\Update\Query\Query
;
use
Solarium\QueryType\Update\RequestBuilder
;
use
Solarium\Core\Client\Request
;
use
Solarium\Core\Client\Request
;
use
Solarium\QueryType\Update\Query\Command\Add
as
AddCommand
;
use
Solarium\QueryType\Update\Query\Command\Add
as
AddCommand
;
use
Solarium\QueryType\Update\Query\Command\Commit
as
CommitCommand
;
use
Solarium\QueryType\Update\Query\Command\Delete
as
DeleteCommand
;
use
Solarium\QueryType\Update\Query\Command\Delete
as
DeleteCommand
;
use
Solarium\QueryType\Update\Query\Command\Optimize
as
OptimizeCommand
;
use
Solarium\QueryType\Update\Query\Command\Optimize
as
OptimizeCommand
;
use
Solarium\QueryType\Update\Query\Command\Commit
as
CommitCommand
;
use
Solarium\QueryType\Update\Query\Command\Rollback
as
RollbackCommand
;
use
Solarium\QueryType\Update\Query\Command\Rollback
as
RollbackCommand
;
use
Solarium\QueryType\Update\Query\Document\Document
;
use
Solarium\QueryType\Update\Query\Document\Document
;
use
Solarium\QueryType\Update\Query\Query
;
use
Solarium\QueryType\Update\RequestBuilder
;
class
RequestBuilderTest
extends
\PHPUnit_Framework_TestCase
class
RequestBuilderTest
extends
\PHPUnit_Framework_TestCase
{
{
...
@@ -127,13 +127,52 @@ class RequestBuilderTest extends \PHPUnit_Framework_TestCase
...
@@ -127,13 +127,52 @@ class RequestBuilderTest extends \PHPUnit_Framework_TestCase
$command
->
addDocument
(
new
Document
(
array
(
'id'
=>
array
(
1
,
2
,
3
),
'text'
=>
'test < 123 > test'
)));
$command
->
addDocument
(
new
Document
(
array
(
'id'
=>
array
(
1
,
2
,
3
),
'text'
=>
'test < 123 > test'
)));
$this
->
assertEquals
(
$this
->
assertEquals
(
'<add>'
.
'<add>'
.
'<doc>'
.
'<doc>'
.
'<field name="id">1</field>'
.
'<field name="id">1</field>'
.
'<field name="id">2</field>'
.
'<field name="id">2</field>'
.
'<field name="id">3</field>'
.
'<field name="id">3</field>'
.
'<field name="text">test < 123 > test</field>'
.
'<field name="text">test < 123 > test</field>'
.
'</doc>'
.
'</doc>'
.
'</add>'
,
$this
->
builder
->
buildAddXml
(
$command
)
);
}
public
function
testBuildAddXmlWithNestedDocuments
()
{
$command
=
new
AddCommand
;
$command
->
addDocument
(
new
Document
(
array
(
'id'
=>
array
(
array
(
'nested_id'
=>
42
,
'customer_ids'
=>
array
(
15
,
16
)
),
2
,
'foo'
),
'text'
=>
'test < 123 > test'
)
)
);
$this
->
assertEquals
(
'<add>'
.
'<doc>'
.
'<doc>'
.
'<field name="nested_id">42</field>'
.
'<field name="customer_ids">15</field>'
.
'<field name="customer_ids">16</field>'
.
'</doc>'
.
'<field name="id">2</field>'
.
'<field name="id">foo</field>'
.
'<field name="text">test < 123 > test</field>'
.
'</doc>'
.
'</add>'
,
'</add>'
,
$this
->
builder
->
buildAddXml
(
$command
)
$this
->
builder
->
buildAddXml
(
$command
)
);
);
...
@@ -189,13 +228,13 @@ class RequestBuilderTest extends \PHPUnit_Framework_TestCase
...
@@ -189,13 +228,13 @@ class RequestBuilderTest extends \PHPUnit_Framework_TestCase
$command
->
addDocument
(
$doc
);
$command
->
addDocument
(
$doc
);
$this
->
assertEquals
(
$this
->
assertEquals
(
'<add>'
.
'<add>'
.
'<doc>'
.
'<doc>'
.
'<field name="id">1</field>'
.
'<field name="id">1</field>'
.
'<field name="category" update="add">123</field>'
.
'<field name="category" update="add">123</field>'
.
'<field name="name" boost="2.5" update="set">test</field>'
.
'<field name="name" boost="2.5" update="set">test</field>'
.
'<field name="stock" update="inc">2</field>'
.
'<field name="stock" update="inc">2</field>'
.
'</doc>'
.
'</doc>'
.
'</add>'
,
'</add>'
,
$this
->
builder
->
buildAddXml
(
$command
)
$this
->
builder
->
buildAddXml
(
$command
)
);
);
...
@@ -214,14 +253,14 @@ class RequestBuilderTest extends \PHPUnit_Framework_TestCase
...
@@ -214,14 +253,14 @@ class RequestBuilderTest extends \PHPUnit_Framework_TestCase
$command
->
addDocument
(
$doc
);
$command
->
addDocument
(
$doc
);
$this
->
assertEquals
(
$this
->
assertEquals
(
'<add>'
.
'<add>'
.
'<doc>'
.
'<doc>'
.
'<field name="id">1</field>'
.
'<field name="id">1</field>'
.
'<field name="category" update="add">123</field>'
.
'<field name="category" update="add">123</field>'
.
'<field name="category" update="add">234</field>'
.
'<field name="category" update="add">234</field>'
.
'<field name="name" boost="2.3" update="set">test</field>'
.
'<field name="name" boost="2.3" update="set">test</field>'
.
'<field name="stock" update="inc">2</field>'
.
'<field name="stock" update="inc">2</field>'
.
'</doc>'
.
'</doc>'
.
'</add>'
,
'</add>'
,
$this
->
builder
->
buildAddXml
(
$command
)
$this
->
builder
->
buildAddXml
(
$command
)
);
);
...
@@ -244,7 +283,9 @@ class RequestBuilderTest extends \PHPUnit_Framework_TestCase
...
@@ -244,7 +283,9 @@ class RequestBuilderTest extends \PHPUnit_Framework_TestCase
public
function
testBuildAddXmlWithDateTime
()
public
function
testBuildAddXmlWithDateTime
()
{
{
$command
=
new
AddCommand
;
$command
=
new
AddCommand
;
$command
->
addDocument
(
new
Document
(
array
(
'id'
=>
1
,
'datetime'
=>
new
\DateTime
(
'2013-01-15 14:41:58'
))));
$command
->
addDocument
(
new
Document
(
array
(
'id'
=>
1
,
'datetime'
=>
new
\DateTime
(
'2013-01-15 14:41:58'
,
new
\DateTimeZone
(
'Europe/London'
))))
);
$this
->
assertEquals
(
$this
->
assertEquals
(
'<add><doc><field name="id">1</field><field name="datetime">2013-01-15T14:41:58Z</field></doc></add>'
,
'<add><doc><field name="id">1</field><field name="datetime">2013-01-15T14:41:58Z</field></doc></add>'
,
...
@@ -262,11 +303,11 @@ class RequestBuilderTest extends \PHPUnit_Framework_TestCase
...
@@ -262,11 +303,11 @@ class RequestBuilderTest extends \PHPUnit_Framework_TestCase
$command
->
addDocument
(
$doc
);
$command
->
addDocument
(
$doc
);
$this
->
assertEquals
(
$this
->
assertEquals
(
'<add>'
.
'<add>'
.
'<doc>'
.
'<doc>'
.
'<field name="employeeId">05991</field>'
.
'<field name="employeeId">05991</field>'
.
'<field name="skills" update="set" null="true"></field>'
.
'<field name="skills" update="set" null="true"></field>'
.
'</doc>'
.
'</doc>'
.
'</add>'
,
'</add>'
,
$this
->
builder
->
buildAddXml
(
$command
)
$this
->
builder
->
buildAddXml
(
$command
)
);
);
...
@@ -366,7 +407,7 @@ class RequestBuilderTest extends \PHPUnit_Framework_TestCase
...
@@ -366,7 +407,7 @@ class RequestBuilderTest extends \PHPUnit_Framework_TestCase
public
function
testBuildOptimizeXmlWithParams
()
public
function
testBuildOptimizeXmlWithParams
()
{
{
$command
=
new
OptimizeCommand
(
array
(
'softcommit'
=>
true
,
'waitsearcher'
=>
false
,
'maxsegments'
=>
10
));
$command
=
new
OptimizeCommand
(
array
(
'softcommit'
=>
true
,
'waitsearcher'
=>
false
,
'maxsegments'
=>
10
));
$this
->
assertEquals
(
$this
->
assertEquals
(
'<optimize softCommit="true" waitSearcher="false" maxSegments="10"/>'
,
'<optimize softCommit="true" waitSearcher="false" maxSegments="10"/>'
,
...
@@ -386,7 +427,7 @@ class RequestBuilderTest extends \PHPUnit_Framework_TestCase
...
@@ -386,7 +427,7 @@ class RequestBuilderTest extends \PHPUnit_Framework_TestCase
public
function
testBuildCommitXmlWithParams
()
public
function
testBuildCommitXmlWithParams
()
{
{
$command
=
new
CommitCommand
(
array
(
'softcommit'
=>
true
,
'waitsearcher'
=>
false
,
'expungedeletes'
=>
true
));
$command
=
new
CommitCommand
(
array
(
'softcommit'
=>
true
,
'waitsearcher'
=>
false
,
'expungedeletes'
=>
true
));
$this
->
assertEquals
(
$this
->
assertEquals
(
'<commit softCommit="true" waitSearcher="false" expungeDeletes="true"/>'
,
'<commit softCommit="true" waitSearcher="false" expungeDeletes="true"/>'
,
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment