Merge branch 'chillu/pulls/dataobject-index'

This commit is contained in:
Daniel Hensby 2016-10-04 11:58:08 +01:00
commit e37c3a265b
No known key found for this signature in database
GPG Key ID: B00D1E9767F0B06E

View File

@ -170,7 +170,7 @@ and tell Solr to use this folder with the `extraspath` configuration setting.
'extraspath' => Director::baseFolder() . '/mysite/data/solr/',
));
Please run the `Solr_configure` task for the changes to take effect.
Please run the `Solr_Configure` task for the changes to take effect.
Note: You can also define those on an index-by-index basis by
implementing `SolrIndex->getExtrasPath()`.
@ -468,15 +468,71 @@ Create a custom `solrconfig.xml` (see "File-based configuration").
Add the following XML configuration.
<lib dir="./contrib/extraction/lib/" />
<lib dir="./dist" />
<lib dir="./dist" />
Now apply the configuration:
sake dev/tasks/Solr_configure
sake dev/tasks/Solr_Configure
Now you can use Solr text extraction either directly through the HTTP API,
or indirectly through the ["textextraction" module](https://github.com/silverstripe-labs/silverstripe-textextraction).
## Adding DataObject classes to Solr search
If you create a class that extends `DataObject` (and not `Page`) then it won't be automatically added to the search
index. You'll have to make some changes to add it in.
So, let's take an example of `StaffMember`:
:::php
<?php
class StaffMember extends DataObject {
private static $db = array(
'Name' => 'Varchar(255)',
'Abstract' => 'Text',
'PhoneNumber' => 'Varchar(50)'
);
public function Link($action = 'show') {
return Controller::join_links('my-controller', $action, $this->ID);
}
public function getShowInSearch() {
return 1;
}
}
This `DataObject` class has the minimum code necessary to allow it to be viewed in the site search.
`Link()` will return a URL for where a user goes to view the data in more detail in the search results.
`Name` will be used as the result title, and `Abstract` the summary of the staff member which will show under the
search result title.
`getShowInSearch` is required to get the record to show in search, since all results are filtered by `ShowInSearch`.
So with that, let's create a new class called `MySolrSearchIndex`:
:::php
<?php
class MySolrSearchIndex extends SolrIndex {
public function init() {
$this->addClass('SiteTree');
$this->addClass('StaffMember');
$this->addAllFulltextFields();
$this->addFilterField('ShowInSearch');
}
}
This is a copy/paste of the existing configuration but with the addition of `StaffMember`.
Once you've created the above classes and run `flush=1`, access `dev/tasks/Solr_Configure` and `dev/tasks/Solr_Reindex`
to tell Solr about the new index you've just created. This will add `StaffMember` and the text fields it has to the
index. Now when you search on the site using `MySolrSearchIndex->search()`,
the `StaffMember` results will show alongside normal `Page` results.
## Debugging
### Using the web admin interface