datastax_rails 1.0.5
Sign up to get free protection for your applications and to get access to all the features.
- data/MIT-LICENSE +20 -0
- data/README.rdoc +62 -0
- data/Rakefile +34 -0
- data/config/schema.xml +266 -0
- data/config/schema.xml.erb +70 -0
- data/config/solrconfig.xml +1564 -0
- data/config/stopwords.txt +58 -0
- data/lib/datastax_rails/associations/association.rb +224 -0
- data/lib/datastax_rails/associations/association_scope.rb +25 -0
- data/lib/datastax_rails/associations/belongs_to_association.rb +64 -0
- data/lib/datastax_rails/associations/builder/association.rb +56 -0
- data/lib/datastax_rails/associations/builder/belongs_to.rb +30 -0
- data/lib/datastax_rails/associations/builder/collection_association.rb +48 -0
- data/lib/datastax_rails/associations/builder/has_and_belongs_to_many.rb +36 -0
- data/lib/datastax_rails/associations/builder/has_many.rb +54 -0
- data/lib/datastax_rails/associations/builder/has_one.rb +52 -0
- data/lib/datastax_rails/associations/builder/singular_association.rb +56 -0
- data/lib/datastax_rails/associations/collection_association.rb +274 -0
- data/lib/datastax_rails/associations/collection_proxy.rb +118 -0
- data/lib/datastax_rails/associations/has_and_belongs_to_many_association.rb +44 -0
- data/lib/datastax_rails/associations/has_many_association.rb +58 -0
- data/lib/datastax_rails/associations/has_one_association.rb +68 -0
- data/lib/datastax_rails/associations/singular_association.rb +58 -0
- data/lib/datastax_rails/associations.rb +86 -0
- data/lib/datastax_rails/attribute_methods/definition.rb +20 -0
- data/lib/datastax_rails/attribute_methods/dirty.rb +43 -0
- data/lib/datastax_rails/attribute_methods/typecasting.rb +50 -0
- data/lib/datastax_rails/attribute_methods.rb +104 -0
- data/lib/datastax_rails/base.rb +587 -0
- data/lib/datastax_rails/batches.rb +35 -0
- data/lib/datastax_rails/callbacks.rb +37 -0
- data/lib/datastax_rails/collection.rb +9 -0
- data/lib/datastax_rails/connection.rb +21 -0
- data/lib/datastax_rails/consistency.rb +33 -0
- data/lib/datastax_rails/cql/base.rb +15 -0
- data/lib/datastax_rails/cql/column_family.rb +38 -0
- data/lib/datastax_rails/cql/consistency.rb +13 -0
- data/lib/datastax_rails/cql/create_column_family.rb +63 -0
- data/lib/datastax_rails/cql/create_keyspace.rb +30 -0
- data/lib/datastax_rails/cql/delete.rb +41 -0
- data/lib/datastax_rails/cql/drop_column_family.rb +13 -0
- data/lib/datastax_rails/cql/drop_keyspace.rb +13 -0
- data/lib/datastax_rails/cql/insert.rb +53 -0
- data/lib/datastax_rails/cql/select.rb +51 -0
- data/lib/datastax_rails/cql/truncate.rb +13 -0
- data/lib/datastax_rails/cql/update.rb +68 -0
- data/lib/datastax_rails/cql/use_keyspace.rb +13 -0
- data/lib/datastax_rails/cql.rb +25 -0
- data/lib/datastax_rails/cursor.rb +90 -0
- data/lib/datastax_rails/errors.rb +16 -0
- data/lib/datastax_rails/identity/abstract_key_factory.rb +26 -0
- data/lib/datastax_rails/identity/custom_key_factory.rb +36 -0
- data/lib/datastax_rails/identity/hashed_natural_key_factory.rb +10 -0
- data/lib/datastax_rails/identity/natural_key_factory.rb +37 -0
- data/lib/datastax_rails/identity/uuid_key_factory.rb +23 -0
- data/lib/datastax_rails/identity.rb +53 -0
- data/lib/datastax_rails/log_subscriber.rb +37 -0
- data/lib/datastax_rails/migrations/migration.rb +15 -0
- data/lib/datastax_rails/migrations.rb +36 -0
- data/lib/datastax_rails/mocking.rb +15 -0
- data/lib/datastax_rails/persistence.rb +133 -0
- data/lib/datastax_rails/railtie.rb +20 -0
- data/lib/datastax_rails/reflection.rb +472 -0
- data/lib/datastax_rails/relation/finder_methods.rb +184 -0
- data/lib/datastax_rails/relation/modification_methods.rb +80 -0
- data/lib/datastax_rails/relation/search_methods.rb +349 -0
- data/lib/datastax_rails/relation/spawn_methods.rb +107 -0
- data/lib/datastax_rails/relation.rb +393 -0
- data/lib/datastax_rails/schema/migration.rb +106 -0
- data/lib/datastax_rails/schema/migration_proxy.rb +25 -0
- data/lib/datastax_rails/schema/migrator.rb +212 -0
- data/lib/datastax_rails/schema.rb +37 -0
- data/lib/datastax_rails/scoping.rb +394 -0
- data/lib/datastax_rails/serialization.rb +6 -0
- data/lib/datastax_rails/tasks/column_family.rb +162 -0
- data/lib/datastax_rails/tasks/ds.rake +63 -0
- data/lib/datastax_rails/tasks/keyspace.rb +57 -0
- data/lib/datastax_rails/timestamps.rb +19 -0
- data/lib/datastax_rails/type.rb +16 -0
- data/lib/datastax_rails/types/array_type.rb +77 -0
- data/lib/datastax_rails/types/base_type.rb +26 -0
- data/lib/datastax_rails/types/binary_type.rb +15 -0
- data/lib/datastax_rails/types/boolean_type.rb +22 -0
- data/lib/datastax_rails/types/date_type.rb +17 -0
- data/lib/datastax_rails/types/float_type.rb +18 -0
- data/lib/datastax_rails/types/integer_type.rb +18 -0
- data/lib/datastax_rails/types/string_type.rb +16 -0
- data/lib/datastax_rails/types/text_type.rb +16 -0
- data/lib/datastax_rails/types/time_type.rb +17 -0
- data/lib/datastax_rails/types.rb +9 -0
- data/lib/datastax_rails/validations/uniqueness.rb +119 -0
- data/lib/datastax_rails/validations.rb +48 -0
- data/lib/datastax_rails/version.rb +3 -0
- data/lib/datastax_rails.rb +87 -0
- data/lib/solr_no_escape.rb +28 -0
- data/spec/datastax_rails/associations/belongs_to_association_spec.rb +7 -0
- data/spec/datastax_rails/associations/has_many_association_spec.rb +37 -0
- data/spec/datastax_rails/associations_spec.rb +22 -0
- data/spec/datastax_rails/attribute_methods_spec.rb +23 -0
- data/spec/datastax_rails/base_spec.rb +15 -0
- data/spec/datastax_rails/cql/select_spec.rb +12 -0
- data/spec/datastax_rails/cql/update_spec.rb +0 -0
- data/spec/datastax_rails/relation/finder_methods_spec.rb +54 -0
- data/spec/datastax_rails/relation/modification_methods_spec.rb +41 -0
- data/spec/datastax_rails/relation/search_methods_spec.rb +117 -0
- data/spec/datastax_rails/relation/spawn_methods_spec.rb +28 -0
- data/spec/datastax_rails/relation_spec.rb +130 -0
- data/spec/datastax_rails/validations/uniqueness_spec.rb +41 -0
- data/spec/datastax_rails_spec.rb +5 -0
- data/spec/dummy/Rakefile +8 -0
- data/spec/dummy/app/assets/javascripts/application.js +9 -0
- data/spec/dummy/app/assets/stylesheets/application.css +7 -0
- data/spec/dummy/app/controllers/application_controller.rb +3 -0
- data/spec/dummy/app/helpers/application_helper.rb +2 -0
- data/spec/dummy/app/views/layouts/application.html.erb +14 -0
- data/spec/dummy/config/application.rb +47 -0
- data/spec/dummy/config/boot.rb +10 -0
- data/spec/dummy/config/database.yml +25 -0
- data/spec/dummy/config/datastax.yml +18 -0
- data/spec/dummy/config/environment.rb +5 -0
- data/spec/dummy/config/environments/development.rb +30 -0
- data/spec/dummy/config/environments/production.rb +60 -0
- data/spec/dummy/config/environments/test.rb +39 -0
- data/spec/dummy/config/initializers/backtrace_silencers.rb +7 -0
- data/spec/dummy/config/initializers/inflections.rb +10 -0
- data/spec/dummy/config/initializers/mime_types.rb +5 -0
- data/spec/dummy/config/initializers/secret_token.rb +7 -0
- data/spec/dummy/config/initializers/session_store.rb +8 -0
- data/spec/dummy/config/initializers/wrap_parameters.rb +14 -0
- data/spec/dummy/config/locales/en.yml +5 -0
- data/spec/dummy/config/routes.rb +58 -0
- data/spec/dummy/config/sunspot.yml +17 -0
- data/spec/dummy/config.ru +4 -0
- data/spec/dummy/ks/migrate/20111117224534_models.rb +20 -0
- data/spec/dummy/ks/schema.json +180 -0
- data/spec/dummy/log/development.log +298 -0
- data/spec/dummy/log/production.log +0 -0
- data/spec/dummy/log/test.log +20307 -0
- data/spec/dummy/public/404.html +26 -0
- data/spec/dummy/public/422.html +26 -0
- data/spec/dummy/public/500.html +26 -0
- data/spec/dummy/public/favicon.ico +0 -0
- data/spec/dummy/script/rails +6 -0
- data/spec/spec.opts +5 -0
- data/spec/spec_helper.rb +29 -0
- data/spec/support/datastax_test_hook.rb +14 -0
- data/spec/support/models.rb +72 -0
- metadata +353 -0
data/MIT-LICENSE
ADDED
@@ -0,0 +1,20 @@
|
|
1
|
+
Copyright (c) 2011-2012 [Jason M. Kusar]
|
2
|
+
|
3
|
+
Permission is hereby granted, free of charge, to any person obtaining
|
4
|
+
a copy of this software and associated documentation files (the
|
5
|
+
"Software"), to deal in the Software without restriction, including
|
6
|
+
without limitation the rights to use, copy, modify, merge, publish,
|
7
|
+
distribute, sublicense, and/or sell copies of the Software, and to
|
8
|
+
permit persons to whom the Software is furnished to do so, subject to
|
9
|
+
the following conditions:
|
10
|
+
|
11
|
+
The above copyright notice and this permission notice shall be
|
12
|
+
included in all copies or substantial portions of the Software.
|
13
|
+
|
14
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
|
15
|
+
EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
|
16
|
+
MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
|
17
|
+
NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
|
18
|
+
LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
|
19
|
+
OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
|
20
|
+
WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
data/README.rdoc
ADDED
@@ -0,0 +1,62 @@
|
|
1
|
+
= datastax_rails
|
2
|
+
==============
|
3
|
+
|
4
|
+
A Ruby-on-Rails interface to Datastax Enterprise (specifically DSE Search nodes). Replaces the majority of ActiveRecord functionality.
|
5
|
+
|
6
|
+
This gem is based heavily on the excellent CassandraObject gem (https://github.com/data-axle/cassandra_object) as well as some work I initially
|
7
|
+
did in the form of SolandraObject (https://github.com/jasonmk/solandra_object). We made the decision to move away from Solandra and to
|
8
|
+
Datastax Enterprise, thus datastax_rails was born.
|
9
|
+
|
10
|
+
Significant changes from SolandraObject:
|
11
|
+
|
12
|
+
* Cassandra communication is now entirely CQL-based
|
13
|
+
* Solr communication is now handled directly via RSolr
|
14
|
+
* Bifurcation of data is no longer necessary as DSE writes data to SOLR automatically
|
15
|
+
|
16
|
+
=== Usage Note
|
17
|
+
|
18
|
+
Before using this gem, you should probably take a strong look at the type of problem you are trying to solve. Cassandra is primarily
|
19
|
+
designed as a solution to Big Data problems. This gem is not. You will notice that it still carries a lot of relational logic with it.
|
20
|
+
We are using DSE to solve a replication problem more so than a Big Data problem. That's not to say that this gem won't work for Big Data problems,
|
21
|
+
it just might not be ideal. You've been warned...
|
22
|
+
|
23
|
+
=== Getting started
|
24
|
+
|
25
|
+
First add it to your Gemfile:
|
26
|
+
|
27
|
+
gem 'datastax_rails'
|
28
|
+
|
29
|
+
Configure the config/datastax.yml file:
|
30
|
+
|
31
|
+
development:
|
32
|
+
servers: ["localhost:9160"]
|
33
|
+
keyspace: "<my_app>_development"
|
34
|
+
strategy_class: "org.apache.cassandra.locator.NetworkTopologyStrategy"
|
35
|
+
strategy_options: {"DC1": "1"}
|
36
|
+
solr:
|
37
|
+
url: http://localhost:8983/solr
|
38
|
+
|
39
|
+
The above is configured to use NetworkTopologyStrategy. If you go with this, you'll need to configure Datastax to use the
|
40
|
+
NetworkTopologySnitch and set up the cassandra-topology.properties file. See the Datastax documentation for more information.
|
41
|
+
For a more simple, single datacenter setup, something like this should probably work:
|
42
|
+
|
43
|
+
development:
|
44
|
+
servers: ["localhost:9160"]
|
45
|
+
keyspace: "<my_app>_development"
|
46
|
+
strategy_class: "org.apache.cassandra.locator.SimpleStrategy"
|
47
|
+
strategy_options: {"replication_factor": "1"}
|
48
|
+
solr:
|
49
|
+
url: http://localhost:8983/solr
|
50
|
+
|
51
|
+
Create your keyspace:
|
52
|
+
|
53
|
+
rake ds:create
|
54
|
+
rake ds:create RAILS_ENV=test
|
55
|
+
|
56
|
+
Once you've created some models, the following will upload the solr schemas and create the column families:
|
57
|
+
|
58
|
+
rake ds:schema
|
59
|
+
rake ds:schema RAILS_ENV=test
|
60
|
+
|
61
|
+
It is safe to run ds:schema over and over. In fact, it is necessary to re-run it any time you change the
|
62
|
+
attributes on any model. DSR will only upload schema files if they have changed.
|
data/Rakefile
ADDED
@@ -0,0 +1,34 @@
|
|
1
|
+
#!/usr/bin/env rake
|
2
|
+
begin
|
3
|
+
require 'bundler/setup'
|
4
|
+
rescue LoadError
|
5
|
+
puts 'You must `gem install bundler` and `bundle install` to run rake tasks'
|
6
|
+
end
|
7
|
+
begin
|
8
|
+
require 'rdoc/task'
|
9
|
+
rescue LoadError
|
10
|
+
require 'rdoc/rdoc'
|
11
|
+
require 'rake/rdoctask'
|
12
|
+
RDoc::Task = Rake::RDocTask
|
13
|
+
end
|
14
|
+
|
15
|
+
RDoc::Task.new(:rdoc) do |rdoc|
|
16
|
+
rdoc.rdoc_dir = 'rdoc'
|
17
|
+
rdoc.title = 'DatastaxRails'
|
18
|
+
rdoc.options << '--line-numbers'
|
19
|
+
rdoc.rdoc_files.include('README.rdoc')
|
20
|
+
rdoc.rdoc_files.include('lib/**/*.rb')
|
21
|
+
end
|
22
|
+
|
23
|
+
APP_RAKEFILE = File.expand_path("../spec/dummy/Rakefile", __FILE__)
|
24
|
+
load 'rails/tasks/engine.rake'
|
25
|
+
|
26
|
+
require 'rspec/core/rake_task'
|
27
|
+
RSpec::Core::RakeTask.new(:spec) do |spec|
|
28
|
+
#spec.rcov = true
|
29
|
+
#spec.rcov_opts = %w{--rails --exclude osx\/objc,gems\/,spec\/,features\/,cassandra_object\/}
|
30
|
+
spec.rspec_opts = File.read(File.expand_path("../spec/spec.opts", __FILE__)).split("\n")
|
31
|
+
end
|
32
|
+
task :default => :spec
|
33
|
+
|
34
|
+
Bundler::GemHelper.install_tasks
|
data/config/schema.xml
ADDED
@@ -0,0 +1,266 @@
|
|
1
|
+
<?xml version="1.0" encoding="UTF-8"?>
|
2
|
+
<!--
|
3
|
+
Licensed to the Apache Software Foundation (ASF) under one or more
|
4
|
+
contributor license agreements. See the NOTICE file distributed with
|
5
|
+
this work for additional information regarding copyright ownership.
|
6
|
+
The ASF licenses this file to You under the Apache License, Version 2.0
|
7
|
+
(the "License"); you may not use this file except in compliance with
|
8
|
+
the License. You may obtain a copy of the License at
|
9
|
+
|
10
|
+
http://www.apache.org/licenses/LICENSE-2.0
|
11
|
+
|
12
|
+
Unless required by applicable law or agreed to in writing, software
|
13
|
+
distributed under the License is distributed on an "AS IS" BASIS,
|
14
|
+
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
15
|
+
See the License for the specific language governing permissions and
|
16
|
+
limitations under the License.
|
17
|
+
-->
|
18
|
+
<!--
|
19
|
+
This is the Solr schema file. This file should be named "schema.xml" and
|
20
|
+
should be in the conf directory under the solr home
|
21
|
+
(i.e. ./solr/conf/schema.xml by default)
|
22
|
+
or located where the classloader for the Solr webapp can find it.
|
23
|
+
|
24
|
+
This example schema is the recommended starting point for users.
|
25
|
+
It should be kept correct and concise, usable out-of-the-box.
|
26
|
+
|
27
|
+
For more information, on how to customize this file, please see
|
28
|
+
http://wiki.apache.org/solr/SchemaXml
|
29
|
+
|
30
|
+
PERFORMANCE NOTE: this schema includes many optional features and should not
|
31
|
+
be used for benchmarking. To improve performance one could
|
32
|
+
- set stored="false" for all fields possible (esp large fields) when you
|
33
|
+
only need to search on the field but don't need to return the original
|
34
|
+
value.
|
35
|
+
- set indexed="false" if you don't need to search on the field, but only
|
36
|
+
return the field as a result of searching on other indexed fields.
|
37
|
+
- remove all unneeded copyField statements
|
38
|
+
- for best index size and searching performance, set "index" to false
|
39
|
+
for all general text fields, use copyField to copy them to the
|
40
|
+
catchall "text" field, and use that for searching.
|
41
|
+
- For maximum indexing performance, use the StreamingUpdateSolrServer
|
42
|
+
java client.
|
43
|
+
- Remember to run the JVM in server mode, and use a higher logging level
|
44
|
+
that avoids logging every request
|
45
|
+
-->
|
46
|
+
<schema name="sunspot" version="1.0">
|
47
|
+
<types>
|
48
|
+
<!-- field type definitions. The "name" attribute is
|
49
|
+
just a label to be used by field definitions. The "class"
|
50
|
+
attribute and any other attributes determine the real
|
51
|
+
behavior of the fieldType.
|
52
|
+
Class names starting with "solr" refer to java classes in the
|
53
|
+
org.apache.solr.analysis package.
|
54
|
+
-->
|
55
|
+
<!-- *** This fieldType is used by Sunspot! *** -->
|
56
|
+
<fieldType name="string" class="solr.StrField" omitNorms="true"/>
|
57
|
+
<fieldType name="string_ci" class="solr.TextField" omitNorms="true">
|
58
|
+
<analyzer type="index">
|
59
|
+
<tokenizer class="solr.KeywordTokenizerFactory"/>
|
60
|
+
<filter class="solr.LowerCaseFilterFactory"/>
|
61
|
+
</analyzer>
|
62
|
+
<analyzer type="query">
|
63
|
+
<tokenizer class="solr.KeywordTokenizerFactory"/>
|
64
|
+
<filter class="solr.LowerCaseFilterFactory"/>
|
65
|
+
</analyzer>
|
66
|
+
</fieldType>
|
67
|
+
<!-- *** This fieldType is used by Sunspot! *** -->
|
68
|
+
<fieldType name="tdouble" class="solr.TrieDoubleField" omitNorms="true"/>
|
69
|
+
<!-- *** This fieldType is used by Sunspot! *** -->
|
70
|
+
<fieldType name="rand" class="solr.RandomSortField" omitNorms="true"/>
|
71
|
+
<!-- *** This fieldType is used by Sunspot! *** -->
|
72
|
+
<fieldType name="text" class="solr.TextField" omitNorms="false">
|
73
|
+
<analyzer>
|
74
|
+
<tokenizer class="solr.StandardTokenizerFactory"/>
|
75
|
+
<filter class="solr.StandardFilterFactory"/>
|
76
|
+
<filter class="solr.LowerCaseFilterFactory"/>
|
77
|
+
</analyzer>
|
78
|
+
</fieldType>
|
79
|
+
<!-- *** This fieldType is used by Sunspot! *** -->
|
80
|
+
<fieldType name="boolean" class="solr.BoolField" omitNorms="true"/>
|
81
|
+
<!-- *** This fieldType is used by Sunspot! *** -->
|
82
|
+
<fieldType name="date" class="solr.DateField" omitNorms="true"/>
|
83
|
+
<!-- *** This fieldType is used by Sunspot! *** -->
|
84
|
+
<fieldType name="sdouble" class="solr.SortableDoubleField" omitNorms="true"/>
|
85
|
+
<!-- *** This fieldType is used by Sunspot! *** -->
|
86
|
+
<fieldType name="sfloat" class="solr.SortableFloatField" omitNorms="true"/>
|
87
|
+
<!-- *** This fieldType is used by Sunspot! *** -->
|
88
|
+
<fieldType name="sint" class="solr.SortableIntField" omitNorms="true"/>
|
89
|
+
<!-- *** This fieldType is used by Sunspot! *** -->
|
90
|
+
<fieldType name="slong" class="solr.SortableLongField" omitNorms="true"/>
|
91
|
+
<!-- *** This fieldType is used by Sunspot! *** -->
|
92
|
+
<fieldType name="tint" class="solr.TrieIntField" omitNorms="true"/>
|
93
|
+
<!-- *** This fieldType is used by Sunspot! *** -->
|
94
|
+
<fieldType name="tfloat" class="solr.TrieFloatField" omitNorms="true"/>
|
95
|
+
<!-- *** This fieldType is used by Sunspot! *** -->
|
96
|
+
<fieldType name="tdate" class="solr.TrieDateField" omitNorms="true"/>
|
97
|
+
</types>
|
98
|
+
<fields>
|
99
|
+
<!-- Valid attributes for fields:
|
100
|
+
name: mandatory - the name for the field
|
101
|
+
type: mandatory - the name of a previously defined type from the
|
102
|
+
<types> section
|
103
|
+
indexed: true if this field should be indexed (searchable or sortable)
|
104
|
+
stored: true if this field should be retrievable
|
105
|
+
compressed: [false] if this field should be stored using gzip compression
|
106
|
+
(this will only apply if the field type is compressable; among
|
107
|
+
the standard field types, only TextField and StrField are)
|
108
|
+
multiValued: true if this field may contain multiple values per document
|
109
|
+
omitNorms: (expert) set to true to omit the norms associated with
|
110
|
+
this field (this disables length normalization and index-time
|
111
|
+
boosting for the field, and saves some memory). Only full-text
|
112
|
+
fields or fields that need an index-time boost need norms.
|
113
|
+
termVectors: [false] set to true to store the term vector for a
|
114
|
+
given field.
|
115
|
+
When using MoreLikeThis, fields used for similarity should be
|
116
|
+
stored for best performance.
|
117
|
+
termPositions: Store position information with the term vector.
|
118
|
+
This will increase storage costs.
|
119
|
+
termOffsets: Store offset information with the term vector. This
|
120
|
+
will increase storage costs.
|
121
|
+
default: a value that should be used if no value is specified
|
122
|
+
when adding a document.
|
123
|
+
-->
|
124
|
+
<!-- *** This field is used by Sunspot! *** -->
|
125
|
+
<field name="id" stored="true" type="string" multiValued="false" indexed="true"/>
|
126
|
+
<!-- *** This field is used by Sunspot! *** -->
|
127
|
+
<field name="type" stored="false" type="string" multiValued="true" indexed="true"/>
|
128
|
+
<!-- *** This field is used by Sunspot! *** -->
|
129
|
+
<field name="class_name" stored="false" type="string" multiValued="false" indexed="true"/>
|
130
|
+
<!-- *** This field is used by Sunspot! *** -->
|
131
|
+
<field name="text" stored="false" type="text" multiValued="true" indexed="true"/>
|
132
|
+
<!-- *** This field is used by Sunspot! *** -->
|
133
|
+
<field name="lat" stored="true" type="tdouble" multiValued="false" indexed="true"/>
|
134
|
+
<!-- *** This field is used by Sunspot! *** -->
|
135
|
+
<field name="lng" stored="true" type="tdouble" multiValued="false" indexed="true"/>
|
136
|
+
<!-- *** This dynamicField is used by Sunspot! *** -->
|
137
|
+
<dynamicField name="random_*" stored="false" type="rand" multiValued="false" indexed="true"/>
|
138
|
+
<!-- *** This dynamicField is used by Sunspot! *** -->
|
139
|
+
<dynamicField name="_local*" stored="false" type="tdouble" multiValued="false" indexed="true"/>
|
140
|
+
<!-- *** This dynamicField is used by Sunspot! *** -->
|
141
|
+
<dynamicField name="*_text" stored="false" type="text" multiValued="true" indexed="true"/>
|
142
|
+
<!-- *** This dynamicField is used by Sunspot! *** -->
|
143
|
+
<dynamicField name="*_texts" stored="true" type="text" multiValued="true" indexed="true"/>
|
144
|
+
<!-- *** This dynamicField is used by Sunspot! *** -->
|
145
|
+
<dynamicField name="*_b" stored="false" type="boolean" multiValued="false" indexed="true"/>
|
146
|
+
<!-- *** This dynamicField is used by Sunspot! *** -->
|
147
|
+
<dynamicField name="*_bm" stored="false" type="boolean" multiValued="true" indexed="true"/>
|
148
|
+
<!-- *** This dynamicField is used by Sunspot! *** -->
|
149
|
+
<dynamicField name="*_bs" stored="true" type="boolean" multiValued="false" indexed="true"/>
|
150
|
+
<!-- *** This dynamicField is used by Sunspot! *** -->
|
151
|
+
<dynamicField name="*_bms" stored="true" type="boolean" multiValued="true" indexed="true"/>
|
152
|
+
<!-- *** This dynamicField is used by Sunspot! *** -->
|
153
|
+
<dynamicField name="*_d" stored="false" type="date" multiValued="false" indexed="true"/>
|
154
|
+
<!-- *** This dynamicField is used by Sunspot! *** -->
|
155
|
+
<dynamicField name="*_dm" stored="false" type="date" multiValued="true" indexed="true"/>
|
156
|
+
<!-- *** This dynamicField is used by Sunspot! *** -->
|
157
|
+
<dynamicField name="*_ds" stored="true" type="date" multiValued="false" indexed="true"/>
|
158
|
+
<!-- *** This dynamicField is used by Sunspot! *** -->
|
159
|
+
<dynamicField name="*_dms" stored="true" type="date" multiValued="true" indexed="true"/>
|
160
|
+
<!-- *** This dynamicField is used by Sunspot! *** -->
|
161
|
+
<dynamicField name="*_e" stored="false" type="sdouble" multiValued="false" indexed="true"/>
|
162
|
+
<!-- *** This dynamicField is used by Sunspot! *** -->
|
163
|
+
<dynamicField name="*_em" stored="false" type="sdouble" multiValued="true" indexed="true"/>
|
164
|
+
<!-- *** This dynamicField is used by Sunspot! *** -->
|
165
|
+
<dynamicField name="*_es" stored="true" type="sdouble" multiValued="false" indexed="true"/>
|
166
|
+
<!-- *** This dynamicField is used by Sunspot! *** -->
|
167
|
+
<dynamicField name="*_ems" stored="true" type="sdouble" multiValued="true" indexed="true"/>
|
168
|
+
<!-- *** This dynamicField is used by Sunspot! *** -->
|
169
|
+
<dynamicField name="*_f" stored="false" type="sfloat" multiValued="false" indexed="true"/>
|
170
|
+
<!-- *** This dynamicField is used by Sunspot! *** -->
|
171
|
+
<dynamicField name="*_fm" stored="false" type="sfloat" multiValued="true" indexed="true"/>
|
172
|
+
<!-- *** This dynamicField is used by Sunspot! *** -->
|
173
|
+
<dynamicField name="*_fs" stored="true" type="sfloat" multiValued="false" indexed="true"/>
|
174
|
+
<!-- *** This dynamicField is used by Sunspot! *** -->
|
175
|
+
<dynamicField name="*_fms" stored="true" type="sfloat" multiValued="true" indexed="true"/>
|
176
|
+
<!-- *** This dynamicField is used by Sunspot! *** -->
|
177
|
+
<dynamicField name="*_i" stored="false" type="sint" multiValued="false" indexed="true"/>
|
178
|
+
<!-- *** This dynamicField is used by Sunspot! *** -->
|
179
|
+
<dynamicField name="*_im" stored="false" type="sint" multiValued="true" indexed="true"/>
|
180
|
+
<!-- *** This dynamicField is used by Sunspot! *** -->
|
181
|
+
<dynamicField name="*_is" stored="true" type="sint" multiValued="false" indexed="true"/>
|
182
|
+
<!-- *** This dynamicField is used by Sunspot! *** -->
|
183
|
+
<dynamicField name="*_ims" stored="true" type="sint" multiValued="true" indexed="true"/>
|
184
|
+
<!-- *** This dynamicField is used by Sunspot! *** -->
|
185
|
+
<dynamicField name="*_l" stored="false" type="slong" multiValued="false" indexed="true"/>
|
186
|
+
<!-- *** This dynamicField is used by Sunspot! *** -->
|
187
|
+
<dynamicField name="*_lm" stored="false" type="slong" multiValued="true" indexed="true"/>
|
188
|
+
<!-- *** This dynamicField is used by Sunspot! *** -->
|
189
|
+
<dynamicField name="*_ls" stored="true" type="slong" multiValued="false" indexed="true"/>
|
190
|
+
<!-- *** This dynamicField is used by Sunspot! *** -->
|
191
|
+
<dynamicField name="*_lms" stored="true" type="slong" multiValued="true" indexed="true"/>
|
192
|
+
<!-- *** This dynamicField is used by Sunspot! *** -->
|
193
|
+
<dynamicField name="*_sc" stored="false" type="string" multiValued="false" indexed="true"/>
|
194
|
+
<!-- *** This dynamicField is used by Sunspot! *** -->
|
195
|
+
<dynamicField name="*_scm" stored="false" type="string" multiValued="true" indexed="true"/>
|
196
|
+
<!-- *** This dynamicField is used by Sunspot! *** -->
|
197
|
+
<dynamicField name="*_scs" stored="true" type="string" multiValued="false" indexed="true"/>
|
198
|
+
<!-- *** This dynamicField is used by Sunspot! *** -->
|
199
|
+
<dynamicField name="*_scms" stored="true" type="string" multiValued="true" indexed="true"/>
|
200
|
+
<!-- *** This dynamicField is used by Sunspot! *** -->
|
201
|
+
<dynamicField name="*_s" stored="false" type="string_ci" multiValued="false" indexed="true"/>
|
202
|
+
<!-- *** This dynamicField is used by Sunspot! *** -->
|
203
|
+
<dynamicField name="*_sm" stored="false" type="string_ci" multiValued="true" indexed="true"/>
|
204
|
+
<!-- *** This dynamicField is used by Sunspot! *** -->
|
205
|
+
<dynamicField name="*_ss" stored="true" type="string_ci" multiValued="false" indexed="true"/>
|
206
|
+
<!-- *** This dynamicField is used by Sunspot! *** -->
|
207
|
+
<dynamicField name="*_sms" stored="true" type="string_ci" multiValued="true" indexed="true"/>
|
208
|
+
<!-- *** This dynamicField is used by Sunspot! *** -->
|
209
|
+
<dynamicField name="*_it" stored="false" type="tint" multiValued="false" indexed="true"/>
|
210
|
+
<!-- *** This dynamicField is used by Sunspot! *** -->
|
211
|
+
<dynamicField name="*_itm" stored="false" type="tint" multiValued="true" indexed="true"/>
|
212
|
+
<!-- *** This dynamicField is used by Sunspot! *** -->
|
213
|
+
<dynamicField name="*_its" stored="true" type="tint" multiValued="false" indexed="true"/>
|
214
|
+
<!-- *** This dynamicField is used by Sunspot! *** -->
|
215
|
+
<dynamicField name="*_itms" stored="true" type="tint" multiValued="true" indexed="true"/>
|
216
|
+
<!-- *** This dynamicField is used by Sunspot! *** -->
|
217
|
+
<dynamicField name="*_ft" stored="false" type="tfloat" multiValued="false" indexed="true"/>
|
218
|
+
<!-- *** This dynamicField is used by Sunspot! *** -->
|
219
|
+
<dynamicField name="*_ftm" stored="false" type="tfloat" multiValued="true" indexed="true"/>
|
220
|
+
<!-- *** This dynamicField is used by Sunspot! *** -->
|
221
|
+
<dynamicField name="*_fts" stored="true" type="tfloat" multiValued="false" indexed="true"/>
|
222
|
+
<!-- *** This dynamicField is used by Sunspot! *** -->
|
223
|
+
<dynamicField name="*_ftms" stored="true" type="tfloat" multiValued="true" indexed="true"/>
|
224
|
+
<!-- *** This dynamicField is used by Sunspot! *** -->
|
225
|
+
<dynamicField name="*_dt" stored="false" type="tdate" multiValued="false" indexed="true"/>
|
226
|
+
<!-- *** This dynamicField is used by Sunspot! *** -->
|
227
|
+
<dynamicField name="*_dtm" stored="false" type="tdate" multiValued="true" indexed="true"/>
|
228
|
+
<!-- *** This dynamicField is used by Sunspot! *** -->
|
229
|
+
<dynamicField name="*_dts" stored="true" type="tdate" multiValued="false" indexed="true"/>
|
230
|
+
<!-- *** This dynamicField is used by Sunspot! *** -->
|
231
|
+
<dynamicField name="*_dtms" stored="true" type="tdate" multiValued="true" indexed="true"/>
|
232
|
+
<!-- *** This dynamicField is used by Sunspot! *** -->
|
233
|
+
<dynamicField name="*_textv" stored="false" termVectors="true" type="text" multiValued="true" indexed="true"/>
|
234
|
+
<!-- *** This dynamicField is used by Sunspot! *** -->
|
235
|
+
<dynamicField name="*_textsv" stored="true" termVectors="true" type="text" multiValued="true" indexed="true"/>
|
236
|
+
<!-- *** This dynamicField is used by Sunspot! *** -->
|
237
|
+
<dynamicField name="*_et" stored="false" termVectors="true" type="tdouble" multiValued="false" indexed="true"/>
|
238
|
+
<!-- *** This dynamicField is used by Sunspot! *** -->
|
239
|
+
<dynamicField name="*_etm" stored="false" termVectors="true" type="tdouble" multiValued="true" indexed="true"/>
|
240
|
+
<!-- *** This dynamicField is used by Sunspot! *** -->
|
241
|
+
<dynamicField name="*_ets" stored="true" termVectors="true" type="tdouble" multiValued="false" indexed="true"/>
|
242
|
+
<!-- *** This dynamicField is used by Sunspot! *** -->
|
243
|
+
<dynamicField name="*_etms" stored="true" termVectors="true" type="tdouble" multiValued="true" indexed="true"/>
|
244
|
+
</fields>
|
245
|
+
<!-- Field to use to determine and enforce document uniqueness.
|
246
|
+
Unless this field is marked with required="false", it will be a required field
|
247
|
+
-->
|
248
|
+
<uniqueKey>id</uniqueKey>
|
249
|
+
<!-- field for the QueryParser to use when an explicit fieldname is absent -->
|
250
|
+
<defaultSearchField>text</defaultSearchField>
|
251
|
+
<!-- SolrQueryParser configuration: defaultOperator="AND|OR" -->
|
252
|
+
<solrQueryParser defaultOperator="AND"/>
|
253
|
+
<!-- copyField commands copy one field to another at the time a document
|
254
|
+
is added to the index. It's used either to index the same field differently,
|
255
|
+
or to add multiple fields to the same field for easier/faster searching. -->
|
256
|
+
<copyField source="*_s" dest="text"/>
|
257
|
+
<copyField source="*_sm" dest="text"/>
|
258
|
+
<copyField source="*_ss" dest="text"/>
|
259
|
+
<copyField source="*_sms" dest="text"/>
|
260
|
+
<copyField source="*_sc" dest="text"/>
|
261
|
+
<copyField source="*_scm" dest="text"/>
|
262
|
+
<copyField source="*_scs" dest="text"/>
|
263
|
+
<copyField source="*_scms" dest="text"/>
|
264
|
+
<copyField source="*_text" dest="text"/>
|
265
|
+
<copyField source="*_texts" dest="text"/>
|
266
|
+
</schema>
|
@@ -0,0 +1,70 @@
|
|
1
|
+
<?xml version="1.0" encoding="UTF-8" ?>
|
2
|
+
<!--
|
3
|
+
Licensed to the Apache Software Foundation (ASF) under one or more
|
4
|
+
contributor license agreements. See the NOTICE file distributed with
|
5
|
+
this work for additional information regarding copyright ownership.
|
6
|
+
The ASF licenses this file to You under the Apache License, Version 2.0
|
7
|
+
(the "License"); you may not use this file except in compliance with
|
8
|
+
the License. You may obtain a copy of the License at
|
9
|
+
|
10
|
+
http://www.apache.org/licenses/LICENSE-2.0
|
11
|
+
|
12
|
+
Unless required by applicable law or agreed to in writing, software
|
13
|
+
distributed under the License is distributed on an "AS IS" BASIS,
|
14
|
+
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
15
|
+
See the License for the specific language governing permissions and
|
16
|
+
limitations under the License.
|
17
|
+
-->
|
18
|
+
<schema name="datastax_rails" version="1.1">
|
19
|
+
<types>
|
20
|
+
<fieldType name="string_cs" class="solr.StrField" omitNorms="true"/>
|
21
|
+
<fieldType name="string" class="solr.TextField" omitNorms="true">
|
22
|
+
<analyzer type="index">
|
23
|
+
<tokenizer class="solr.KeywordTokenizerFactory"/>
|
24
|
+
<filter class="solr.LowerCaseFilterFactory"/>
|
25
|
+
</analyzer>
|
26
|
+
<analyzer type="query">
|
27
|
+
<tokenizer class="solr.KeywordTokenizerFactory"/>
|
28
|
+
<filter class="solr.LowerCaseFilterFactory"/>
|
29
|
+
</analyzer>
|
30
|
+
</fieldType>
|
31
|
+
<fieldType name="text" class="solr.TextField" omitNorms="false" positionIncrementGap="100">
|
32
|
+
<analyzer>
|
33
|
+
<tokenizer class="solr.StandardTokenizerFactory"/>
|
34
|
+
<filter class="solr.StopFilterFactory" ignoreCase="true" words="stopwords.txt" enablePositionIncrements="true" />
|
35
|
+
<filter class="solr.StandardFilterFactory"/>
|
36
|
+
<filter class="solr.LowerCaseFilterFactory"/>
|
37
|
+
</analyzer>
|
38
|
+
</fieldType>
|
39
|
+
<fieldType name="array" class="solr.TextField" positionIncrementGap="100">
|
40
|
+
<analyzer>
|
41
|
+
<tokenizer class="solr.PatternTokenizerFactory" pattern="\$\$\$\$"/>
|
42
|
+
<filter class="solr.LowerCaseFilterFactory"/>
|
43
|
+
</analyzer>
|
44
|
+
</fieldType>
|
45
|
+
<fieldType name="boolean" class="solr.BoolField" sortMissingLast="true"/>
|
46
|
+
<fieldType name="date" class="solr.TrieDateField" precisionStep="0" positionIncrementGap="0"/>
|
47
|
+
<fieldType name="int" class="solr.TrieIntField" precisionStep="0" positionIncrementGap="0"/>
|
48
|
+
<fieldType name="float" class="solr.TrieFloatField" precisionStep="0" positionIncrementGap="0"/>
|
49
|
+
<fieldType name="long" class="solr.TrieLongField" precisionStep="0" positionIncrementGap="0"/>
|
50
|
+
<fieldType name="double" class="solr.TrieDoubleField" precisionStep="0" positionIncrementGap="0"/>
|
51
|
+
|
52
|
+
</types>
|
53
|
+
<fields>
|
54
|
+
<field name="id" type="string" indexed="true" stored="true"/>
|
55
|
+
<% @fields.each do |field| %>
|
56
|
+
<field name="<%= field[:name] %>" type="<%= field[:type] %>" indexed="<%= field[:indexed] %>" stored="<%= field[:stored] %>" multiValued="<%= field[:multi_valued] %>"/>
|
57
|
+
<% end %>
|
58
|
+
<field name="text" type="text" indexed="true" stored="false" multiValued="true"/>
|
59
|
+
</fields>
|
60
|
+
|
61
|
+
<defaultSearchField>text</defaultSearchField>
|
62
|
+
<solrQueryParser defaultOperator="AND"/>
|
63
|
+
<uniqueKey>id</uniqueKey>
|
64
|
+
<% @fulltext_fields.each do |field| %>
|
65
|
+
<copyField source="<%= field %>" dest="text"/>
|
66
|
+
<% end %>
|
67
|
+
<% @copy_fields.each do |field| %>
|
68
|
+
<copyField source="<%= field[:source] %>" dest="<%= field[:dest]%>"/>
|
69
|
+
<% end %>
|
70
|
+
</schema>
|