human_query_parser 1.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +7 -0
- data/.gitignore +10 -0
- data/.rubocop.yml +131 -0
- data/CHANGELOG.md +4 -0
- data/CODE_OF_CONDUCT.md +46 -0
- data/Gemfile +5 -0
- data/Guardfile +22 -0
- data/Jenkinsfile +92 -0
- data/LICENSE +21 -0
- data/README.md +261 -0
- data/Rakefile +10 -0
- data/bin/_guard-core +16 -0
- data/bin/guard +16 -0
- data/bin/rake +16 -0
- data/human_query_parser.gemspec +29 -0
- data/lib/human_query_parser.rb +14 -0
- data/lib/human_query_parser/bareword.rb +63 -0
- data/lib/human_query_parser/parser.rb +26 -0
- data/lib/human_query_parser/phrase.rb +36 -0
- data/lib/human_query_parser/query.rb +46 -0
- data/lib/human_query_parser/term.rb +22 -0
- data/lib/human_query_parser/transform.rb +14 -0
- data/lib/human_query_parser/version.rb +3 -0
- data/test/bareword_test.rb +52 -0
- data/test/human_query_parser_test.rb +18 -0
- data/test/parser_test.rb +136 -0
- data/test/phrase_test.rb +33 -0
- data/test/query_test.rb +159 -0
- data/test/term_test.rb +16 -0
- data/test/test_helper.rb +18 -0
- data/test/transform_test.rb +185 -0
- metadata +167 -0
data/test/phrase_test.rb
ADDED
@@ -0,0 +1,33 @@
|
|
1
|
+
require 'test_helper'
|
2
|
+
|
3
|
+
class HumanQueryParser::PhraseTest < Minitest::Spec
|
4
|
+
it 'generates a non-fuzzy query fragment correctly' do
|
5
|
+
HumanQueryParser::Phrase.new('bloo blah').query_fragments(['field1', 'field2'], false).must_equal([
|
6
|
+
{
|
7
|
+
multi_match: {
|
8
|
+
fields: ['field1', 'field2'],
|
9
|
+
query: 'bloo blah',
|
10
|
+
type: 'phrase',
|
11
|
+
},
|
12
|
+
},
|
13
|
+
],)
|
14
|
+
end
|
15
|
+
|
16
|
+
it 'generates a fuzzy query fragment correctly' do
|
17
|
+
HumanQueryParser::Phrase.new('bloo blah').query_fragments(['field1', 'field2'], true).must_equal([
|
18
|
+
{
|
19
|
+
function_score: {
|
20
|
+
query: {
|
21
|
+
multi_match: {
|
22
|
+
fields: ['field1', 'field2'],
|
23
|
+
query: 'bloo blah',
|
24
|
+
type: 'phrase',
|
25
|
+
max_expansions: 50,
|
26
|
+
},
|
27
|
+
},
|
28
|
+
boost: 8.0,
|
29
|
+
},
|
30
|
+
},
|
31
|
+
],)
|
32
|
+
end
|
33
|
+
end
|
data/test/query_test.rb
ADDED
@@ -0,0 +1,159 @@
|
|
1
|
+
require 'test_helper'
|
2
|
+
|
3
|
+
class HumanQueryParser::QueryTest < Minitest::Spec
|
4
|
+
describe '#combine_barewords' do
|
5
|
+
it 'combines two bareword terms' do
|
6
|
+
query = HumanQueryParser::Query.new([
|
7
|
+
HumanQueryParser::Term.new(
|
8
|
+
nil,
|
9
|
+
HumanQueryParser::Bareword.new('word'),
|
10
|
+
),
|
11
|
+
HumanQueryParser::Term.new(
|
12
|
+
nil,
|
13
|
+
HumanQueryParser::Bareword.new('up'),
|
14
|
+
),
|
15
|
+
],)
|
16
|
+
|
17
|
+
query.terms_by_operator.size.must_equal 1
|
18
|
+
query.terms_for_operator(nil).size.must_equal 1
|
19
|
+
|
20
|
+
combined_term = query.terms_for_operator(nil).first
|
21
|
+
combined_term.must_be :bareword?
|
22
|
+
combined_term.content.content.must_equal 'word up'
|
23
|
+
end
|
24
|
+
|
25
|
+
it 'does not combine phrases' do
|
26
|
+
query = HumanQueryParser::Query.new([
|
27
|
+
HumanQueryParser::Term.new(
|
28
|
+
nil,
|
29
|
+
HumanQueryParser::Bareword.new('word'),
|
30
|
+
),
|
31
|
+
HumanQueryParser::Term.new(
|
32
|
+
nil,
|
33
|
+
HumanQueryParser::Bareword.new('up'),
|
34
|
+
),
|
35
|
+
HumanQueryParser::Term.new(
|
36
|
+
nil,
|
37
|
+
HumanQueryParser::Phrase.new('a phrase'),
|
38
|
+
),
|
39
|
+
HumanQueryParser::Term.new(
|
40
|
+
nil,
|
41
|
+
HumanQueryParser::Phrase.new('another phrase'),
|
42
|
+
),
|
43
|
+
],)
|
44
|
+
|
45
|
+
query.terms_by_operator.size.must_equal 1
|
46
|
+
query.terms_for_operator(nil).size.must_equal 3
|
47
|
+
|
48
|
+
bareword_term = query.terms_for_operator(nil).first
|
49
|
+
bareword_term.must_be :bareword?
|
50
|
+
bareword_term.content.content.must_equal 'word up'
|
51
|
+
|
52
|
+
phrase_term_1 = query.terms_for_operator(nil)[1]
|
53
|
+
phrase_term_1.wont_be :bareword?
|
54
|
+
phrase_term_1.content.content.must_equal 'a phrase'
|
55
|
+
|
56
|
+
phrase_term_1 = query.terms_for_operator(nil)[2]
|
57
|
+
phrase_term_1.wont_be :bareword?
|
58
|
+
phrase_term_1.content.content.must_equal 'another phrase'
|
59
|
+
end
|
60
|
+
|
61
|
+
it 'does not combine barewords with different operators' do
|
62
|
+
query = HumanQueryParser::Query.new([
|
63
|
+
HumanQueryParser::Term.new(
|
64
|
+
nil,
|
65
|
+
HumanQueryParser::Bareword.new('word'),
|
66
|
+
),
|
67
|
+
HumanQueryParser::Term.new(
|
68
|
+
'+',
|
69
|
+
HumanQueryParser::Bareword.new('up'),
|
70
|
+
),
|
71
|
+
],)
|
72
|
+
|
73
|
+
query.terms_by_operator.size.must_equal 2
|
74
|
+
query.terms_for_operator(nil).size.must_equal 1
|
75
|
+
query.terms_for_operator('+').size.must_equal 1
|
76
|
+
|
77
|
+
word_term = query.terms_for_operator(nil).first
|
78
|
+
word_term.must_be :bareword?
|
79
|
+
word_term.content.content.must_equal 'word'
|
80
|
+
|
81
|
+
word_term = query.terms_for_operator('+').first
|
82
|
+
word_term.must_be :bareword?
|
83
|
+
word_term.content.content.must_equal 'up'
|
84
|
+
end
|
85
|
+
end
|
86
|
+
|
87
|
+
describe '#es_query' do
|
88
|
+
it 'generates a basic query' do
|
89
|
+
bareword = HumanQueryParser::Bareword.new('word')
|
90
|
+
|
91
|
+
query = HumanQueryParser::Query.new([
|
92
|
+
HumanQueryParser::Term.new(
|
93
|
+
'+',
|
94
|
+
bareword,
|
95
|
+
),
|
96
|
+
],)
|
97
|
+
|
98
|
+
query.es_query(['body', 'tags']).must_equal({
|
99
|
+
bool: {
|
100
|
+
must: bareword.query_fragments(['body', 'tags'], false),
|
101
|
+
},
|
102
|
+
},)
|
103
|
+
end
|
104
|
+
|
105
|
+
it 'combines terms of the same operator' do
|
106
|
+
bareword = HumanQueryParser::Bareword.new('word')
|
107
|
+
phrase = HumanQueryParser::Phrase.new('phrase-ology')
|
108
|
+
|
109
|
+
query = HumanQueryParser::Query.new([
|
110
|
+
HumanQueryParser::Term.new(
|
111
|
+
'+',
|
112
|
+
bareword,
|
113
|
+
),
|
114
|
+
HumanQueryParser::Term.new(
|
115
|
+
'+',
|
116
|
+
phrase,
|
117
|
+
),
|
118
|
+
],)
|
119
|
+
|
120
|
+
query.es_query(['body', 'tags']).must_equal({
|
121
|
+
bool: {
|
122
|
+
must: (
|
123
|
+
bareword.query_fragments(['body', 'tags'], false) +
|
124
|
+
phrase.query_fragments(['body', 'tags'], false)
|
125
|
+
),
|
126
|
+
},
|
127
|
+
},)
|
128
|
+
end
|
129
|
+
|
130
|
+
it 'generates separate sections for different operators' do
|
131
|
+
must_word = HumanQueryParser::Bareword.new('word1')
|
132
|
+
should_word = HumanQueryParser::Bareword.new('word2')
|
133
|
+
must_not_word = HumanQueryParser::Bareword.new('word3')
|
134
|
+
|
135
|
+
query = HumanQueryParser::Query.new([
|
136
|
+
HumanQueryParser::Term.new(
|
137
|
+
'+',
|
138
|
+
must_word,
|
139
|
+
),
|
140
|
+
HumanQueryParser::Term.new(
|
141
|
+
nil,
|
142
|
+
should_word,
|
143
|
+
),
|
144
|
+
HumanQueryParser::Term.new(
|
145
|
+
'-',
|
146
|
+
must_not_word,
|
147
|
+
),
|
148
|
+
],)
|
149
|
+
|
150
|
+
query.es_query(['body', 'tags']).must_equal({
|
151
|
+
bool: {
|
152
|
+
must: must_word.query_fragments(['body', 'tags'], false),
|
153
|
+
should: should_word.query_fragments(['body', 'tags'], true),
|
154
|
+
must_not: must_not_word.query_fragments(['body', 'tags'], false),
|
155
|
+
},
|
156
|
+
},)
|
157
|
+
end
|
158
|
+
end
|
159
|
+
end
|
data/test/term_test.rb
ADDED
@@ -0,0 +1,16 @@
|
|
1
|
+
require 'test_helper'
|
2
|
+
|
3
|
+
class HumanQueryParser::TermTest < Minitest::Spec
|
4
|
+
it 'correctly identifies fuzzy vs non-fuzzy terms' do
|
5
|
+
content = HumanQueryParser::Bareword.new('word')
|
6
|
+
|
7
|
+
HumanQueryParser::Term.new(nil, content).must_be :fuzzy?
|
8
|
+
HumanQueryParser::Term.new('+', content).wont_be :fuzzy?
|
9
|
+
HumanQueryParser::Term.new('-', content).wont_be :fuzzy?
|
10
|
+
end
|
11
|
+
|
12
|
+
it 'correctly identifies barewords vs non-barewords' do
|
13
|
+
HumanQueryParser::Term.new(nil, HumanQueryParser::Bareword.new('word')).must_be :bareword?
|
14
|
+
HumanQueryParser::Term.new(nil, HumanQueryParser::Phrase.new('word')).wont_be :bareword?
|
15
|
+
end
|
16
|
+
end
|
data/test/test_helper.rb
ADDED
@@ -0,0 +1,18 @@
|
|
1
|
+
$LOAD_PATH.unshift File.expand_path('../../lib', __FILE__)
|
2
|
+
|
3
|
+
require 'minitest/autorun'
|
4
|
+
require 'minitest/spec'
|
5
|
+
require 'minitest/reporters'
|
6
|
+
require 'pry'
|
7
|
+
|
8
|
+
require 'human_query_parser'
|
9
|
+
|
10
|
+
if ENV['BUILD_NUMBER']
|
11
|
+
Minitest::Reporters.use!(
|
12
|
+
[MiniTest::Reporters::DefaultReporter.new, MiniTest::Reporters::JUnitReporter.new('test/reports')],
|
13
|
+
ENV,
|
14
|
+
Minitest.backtrace_filter,
|
15
|
+
)
|
16
|
+
else
|
17
|
+
Minitest::Reporters.use!(Minitest::Reporters::SpecReporter.new, ENV, Minitest.backtrace_filter)
|
18
|
+
end
|
@@ -0,0 +1,185 @@
|
|
1
|
+
require 'test_helper'
|
2
|
+
|
3
|
+
class HumanQueryParser::TransformTest < Minitest::Spec
|
4
|
+
subject { HumanQueryParser::Transform.new }
|
5
|
+
|
6
|
+
it 'transforms a single term correctly' do
|
7
|
+
query = subject.apply({
|
8
|
+
query: [
|
9
|
+
{
|
10
|
+
operator: nil,
|
11
|
+
term: {
|
12
|
+
bareword: 'word',
|
13
|
+
},
|
14
|
+
},
|
15
|
+
],
|
16
|
+
},)
|
17
|
+
|
18
|
+
word_term = query.terms_for_operator(nil).first
|
19
|
+
word_term.must_be :bareword?
|
20
|
+
word_term.content.content.must_equal 'word'
|
21
|
+
end
|
22
|
+
|
23
|
+
it 'combines two bareword terms' do
|
24
|
+
query = subject.apply({
|
25
|
+
query: [
|
26
|
+
{
|
27
|
+
operator: nil,
|
28
|
+
term: {
|
29
|
+
bareword: 'word',
|
30
|
+
},
|
31
|
+
},
|
32
|
+
{
|
33
|
+
operator: nil,
|
34
|
+
term: {
|
35
|
+
bareword: 'up',
|
36
|
+
},
|
37
|
+
},
|
38
|
+
],
|
39
|
+
},)
|
40
|
+
|
41
|
+
query.terms_by_operator.size.must_equal 1
|
42
|
+
query.terms_for_operator(nil).size.must_equal 1
|
43
|
+
|
44
|
+
combined_term = query.terms_for_operator(nil).first
|
45
|
+
combined_term.must_be :bareword?
|
46
|
+
combined_term.content.content.must_equal 'word up'
|
47
|
+
end
|
48
|
+
|
49
|
+
it 'handles operators correctly' do
|
50
|
+
plus_query = subject.apply({
|
51
|
+
query: [
|
52
|
+
{
|
53
|
+
operator: '+',
|
54
|
+
term: {
|
55
|
+
bareword: 'word',
|
56
|
+
},
|
57
|
+
},
|
58
|
+
],
|
59
|
+
},)
|
60
|
+
|
61
|
+
plus_query.terms_by_operator.size.must_equal 1
|
62
|
+
plus_query.terms_for_operator('+').size.must_equal 1
|
63
|
+
|
64
|
+
minus_query = subject.apply({
|
65
|
+
query: [
|
66
|
+
{
|
67
|
+
operator: '-',
|
68
|
+
term: {
|
69
|
+
bareword: 'word',
|
70
|
+
},
|
71
|
+
},
|
72
|
+
],
|
73
|
+
},)
|
74
|
+
|
75
|
+
minus_query.terms_by_operator.size.must_equal 1
|
76
|
+
minus_query.terms_for_operator('-').size.must_equal 1
|
77
|
+
end
|
78
|
+
|
79
|
+
it 'transforms phrases correctly' do
|
80
|
+
query = subject.apply({
|
81
|
+
query: [
|
82
|
+
{
|
83
|
+
operator: nil,
|
84
|
+
term: {
|
85
|
+
bareword: 'word',
|
86
|
+
},
|
87
|
+
},
|
88
|
+
{
|
89
|
+
operator: nil,
|
90
|
+
term: {
|
91
|
+
phrase: 'a phrase',
|
92
|
+
},
|
93
|
+
},
|
94
|
+
],
|
95
|
+
},)
|
96
|
+
|
97
|
+
query.terms_by_operator.size.must_equal 1
|
98
|
+
query.terms_for_operator(nil).size.must_equal 2
|
99
|
+
|
100
|
+
bareword_term = query.terms_for_operator(nil).first
|
101
|
+
bareword_term.must_be :bareword?
|
102
|
+
bareword_term.content.content.must_equal 'word'
|
103
|
+
|
104
|
+
phrase_term = query.terms_for_operator(nil)[1]
|
105
|
+
phrase_term.wont_be :bareword?
|
106
|
+
phrase_term.content.content.must_equal 'a phrase'
|
107
|
+
end
|
108
|
+
|
109
|
+
it 'does not combine phrases' do
|
110
|
+
query = subject.apply({
|
111
|
+
query: [
|
112
|
+
{
|
113
|
+
operator: nil,
|
114
|
+
term: {
|
115
|
+
bareword: 'word',
|
116
|
+
},
|
117
|
+
},
|
118
|
+
{
|
119
|
+
operator: nil,
|
120
|
+
term: {
|
121
|
+
bareword: 'up',
|
122
|
+
},
|
123
|
+
},
|
124
|
+
{
|
125
|
+
operator: nil,
|
126
|
+
term: {
|
127
|
+
phrase: 'a phrase',
|
128
|
+
},
|
129
|
+
},
|
130
|
+
{
|
131
|
+
operator: nil,
|
132
|
+
term: {
|
133
|
+
phrase: 'another phrase',
|
134
|
+
},
|
135
|
+
},
|
136
|
+
],
|
137
|
+
},)
|
138
|
+
|
139
|
+
query.terms_by_operator.size.must_equal 1
|
140
|
+
query.terms_for_operator(nil).size.must_equal 3
|
141
|
+
|
142
|
+
bareword_term = query.terms_for_operator(nil).first
|
143
|
+
bareword_term.must_be :bareword?
|
144
|
+
bareword_term.content.content.must_equal 'word up'
|
145
|
+
|
146
|
+
phrase_term_1 = query.terms_for_operator(nil)[1]
|
147
|
+
phrase_term_1.wont_be :bareword?
|
148
|
+
phrase_term_1.content.content.must_equal 'a phrase'
|
149
|
+
|
150
|
+
phrase_term_1 = query.terms_for_operator(nil)[2]
|
151
|
+
phrase_term_1.wont_be :bareword?
|
152
|
+
phrase_term_1.content.content.must_equal 'another phrase'
|
153
|
+
end
|
154
|
+
|
155
|
+
it 'does not combine barewords with different operators' do
|
156
|
+
query = subject.apply({
|
157
|
+
query: [
|
158
|
+
{
|
159
|
+
operator: nil,
|
160
|
+
term: {
|
161
|
+
bareword: 'word',
|
162
|
+
},
|
163
|
+
},
|
164
|
+
{
|
165
|
+
operator: '+',
|
166
|
+
term: {
|
167
|
+
bareword: 'up',
|
168
|
+
},
|
169
|
+
},
|
170
|
+
],
|
171
|
+
},)
|
172
|
+
|
173
|
+
query.terms_by_operator.size.must_equal 2
|
174
|
+
query.terms_for_operator(nil).size.must_equal 1
|
175
|
+
query.terms_for_operator('+').size.must_equal 1
|
176
|
+
|
177
|
+
word_term = query.terms_for_operator(nil).first
|
178
|
+
word_term.must_be :bareword?
|
179
|
+
word_term.content.content.must_equal 'word'
|
180
|
+
|
181
|
+
word_term = query.terms_for_operator('+').first
|
182
|
+
word_term.must_be :bareword?
|
183
|
+
word_term.content.content.must_equal 'up'
|
184
|
+
end
|
185
|
+
end
|
metadata
ADDED
@@ -0,0 +1,167 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
name: human_query_parser
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
version: 1.0.0
|
5
|
+
platform: ruby
|
6
|
+
authors:
|
7
|
+
- PatientsLikeMe
|
8
|
+
autorequire:
|
9
|
+
bindir: exe
|
10
|
+
cert_chain: []
|
11
|
+
date: 2018-03-30 00:00:00.000000000 Z
|
12
|
+
dependencies:
|
13
|
+
- !ruby/object:Gem::Dependency
|
14
|
+
name: parslet
|
15
|
+
requirement: !ruby/object:Gem::Requirement
|
16
|
+
requirements:
|
17
|
+
- - "~>"
|
18
|
+
- !ruby/object:Gem::Version
|
19
|
+
version: '1.8'
|
20
|
+
type: :runtime
|
21
|
+
prerelease: false
|
22
|
+
version_requirements: !ruby/object:Gem::Requirement
|
23
|
+
requirements:
|
24
|
+
- - "~>"
|
25
|
+
- !ruby/object:Gem::Version
|
26
|
+
version: '1.8'
|
27
|
+
- !ruby/object:Gem::Dependency
|
28
|
+
name: bundler
|
29
|
+
requirement: !ruby/object:Gem::Requirement
|
30
|
+
requirements:
|
31
|
+
- - "~>"
|
32
|
+
- !ruby/object:Gem::Version
|
33
|
+
version: '1.10'
|
34
|
+
type: :development
|
35
|
+
prerelease: false
|
36
|
+
version_requirements: !ruby/object:Gem::Requirement
|
37
|
+
requirements:
|
38
|
+
- - "~>"
|
39
|
+
- !ruby/object:Gem::Version
|
40
|
+
version: '1.10'
|
41
|
+
- !ruby/object:Gem::Dependency
|
42
|
+
name: rake
|
43
|
+
requirement: !ruby/object:Gem::Requirement
|
44
|
+
requirements:
|
45
|
+
- - "~>"
|
46
|
+
- !ruby/object:Gem::Version
|
47
|
+
version: '10.0'
|
48
|
+
type: :development
|
49
|
+
prerelease: false
|
50
|
+
version_requirements: !ruby/object:Gem::Requirement
|
51
|
+
requirements:
|
52
|
+
- - "~>"
|
53
|
+
- !ruby/object:Gem::Version
|
54
|
+
version: '10.0'
|
55
|
+
- !ruby/object:Gem::Dependency
|
56
|
+
name: minitest
|
57
|
+
requirement: !ruby/object:Gem::Requirement
|
58
|
+
requirements:
|
59
|
+
- - ">="
|
60
|
+
- !ruby/object:Gem::Version
|
61
|
+
version: '0'
|
62
|
+
type: :development
|
63
|
+
prerelease: false
|
64
|
+
version_requirements: !ruby/object:Gem::Requirement
|
65
|
+
requirements:
|
66
|
+
- - ">="
|
67
|
+
- !ruby/object:Gem::Version
|
68
|
+
version: '0'
|
69
|
+
- !ruby/object:Gem::Dependency
|
70
|
+
name: minitest-reporters
|
71
|
+
requirement: !ruby/object:Gem::Requirement
|
72
|
+
requirements:
|
73
|
+
- - ">="
|
74
|
+
- !ruby/object:Gem::Version
|
75
|
+
version: '0'
|
76
|
+
type: :development
|
77
|
+
prerelease: false
|
78
|
+
version_requirements: !ruby/object:Gem::Requirement
|
79
|
+
requirements:
|
80
|
+
- - ">="
|
81
|
+
- !ruby/object:Gem::Version
|
82
|
+
version: '0'
|
83
|
+
- !ruby/object:Gem::Dependency
|
84
|
+
name: pry
|
85
|
+
requirement: !ruby/object:Gem::Requirement
|
86
|
+
requirements:
|
87
|
+
- - ">="
|
88
|
+
- !ruby/object:Gem::Version
|
89
|
+
version: '0'
|
90
|
+
type: :development
|
91
|
+
prerelease: false
|
92
|
+
version_requirements: !ruby/object:Gem::Requirement
|
93
|
+
requirements:
|
94
|
+
- - ">="
|
95
|
+
- !ruby/object:Gem::Version
|
96
|
+
version: '0'
|
97
|
+
description: A tool for taking search queries of the form most users will expect,
|
98
|
+
and producing ElasticSearch queries that do what most users would expect.
|
99
|
+
email:
|
100
|
+
- engineers@patientslikeme.com
|
101
|
+
executables: []
|
102
|
+
extensions: []
|
103
|
+
extra_rdoc_files: []
|
104
|
+
files:
|
105
|
+
- ".gitignore"
|
106
|
+
- ".rubocop.yml"
|
107
|
+
- CHANGELOG.md
|
108
|
+
- CODE_OF_CONDUCT.md
|
109
|
+
- Gemfile
|
110
|
+
- Guardfile
|
111
|
+
- Jenkinsfile
|
112
|
+
- LICENSE
|
113
|
+
- README.md
|
114
|
+
- Rakefile
|
115
|
+
- bin/_guard-core
|
116
|
+
- bin/guard
|
117
|
+
- bin/rake
|
118
|
+
- human_query_parser.gemspec
|
119
|
+
- lib/human_query_parser.rb
|
120
|
+
- lib/human_query_parser/bareword.rb
|
121
|
+
- lib/human_query_parser/parser.rb
|
122
|
+
- lib/human_query_parser/phrase.rb
|
123
|
+
- lib/human_query_parser/query.rb
|
124
|
+
- lib/human_query_parser/term.rb
|
125
|
+
- lib/human_query_parser/transform.rb
|
126
|
+
- lib/human_query_parser/version.rb
|
127
|
+
- test/bareword_test.rb
|
128
|
+
- test/human_query_parser_test.rb
|
129
|
+
- test/parser_test.rb
|
130
|
+
- test/phrase_test.rb
|
131
|
+
- test/query_test.rb
|
132
|
+
- test/term_test.rb
|
133
|
+
- test/test_helper.rb
|
134
|
+
- test/transform_test.rb
|
135
|
+
homepage: https://www.patientslikeme.com
|
136
|
+
licenses: []
|
137
|
+
metadata: {}
|
138
|
+
post_install_message:
|
139
|
+
rdoc_options: []
|
140
|
+
require_paths:
|
141
|
+
- lib
|
142
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
143
|
+
requirements:
|
144
|
+
- - ">="
|
145
|
+
- !ruby/object:Gem::Version
|
146
|
+
version: '0'
|
147
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
148
|
+
requirements:
|
149
|
+
- - ">="
|
150
|
+
- !ruby/object:Gem::Version
|
151
|
+
version: '0'
|
152
|
+
requirements: []
|
153
|
+
rubyforge_project:
|
154
|
+
rubygems_version: 2.7.3
|
155
|
+
signing_key:
|
156
|
+
specification_version: 4
|
157
|
+
summary: A tool for taking search queries of the form most users will expect, and
|
158
|
+
producing ElasticSearch queries that do what most users would expect.
|
159
|
+
test_files:
|
160
|
+
- test/bareword_test.rb
|
161
|
+
- test/human_query_parser_test.rb
|
162
|
+
- test/parser_test.rb
|
163
|
+
- test/phrase_test.rb
|
164
|
+
- test/query_test.rb
|
165
|
+
- test/term_test.rb
|
166
|
+
- test/test_helper.rb
|
167
|
+
- test/transform_test.rb
|