我有“文档”(活动记录),其属性称为“偏差”。该属性具有“ Bin X”,“ Bin $”,“ Bin q”,“ Bin%”等值。
我正在尝试使用tire / elasticsearch搜索属性。我正在使用空白分析器索引偏差属性。这是我用于创建索引的代码:
settings :analysis => {
:filter => {
:ngram_filter => {
:type => "nGram",
:min_gram => 2,
:max_gram => 255
},
:deviation_filter => {
:type => "word_delimiter",
:type_table => ['$ => ALPHA']
}
},
:analyzer => {
:ngram_analyzer => {
:type => "custom",
:tokenizer => "standard",
:filter => ["lowercase", "ngram_filter"]
},
:deviation_analyzer => {
:type => "custom",
:tokenizer => "whitespace",
:filter => ["lowercase"]
}
}
} do
mapping do
indexes :id, :type => 'integer'
[:equipment, :step, :recipe, :details, :description].each do |attribute|
indexes attribute, :type => 'string', :analyzer => 'ngram_analyzer'
end
indexes :deviation, :analyzer => 'whitespace'
end
end
当查询字符串不包含特殊字符时,搜索似乎工作正常。例如,Bin X
将仅返回其中包含单词Bin
AND的那些记录X
。但是,搜索类似Bin $
或的Bin %
结果将显示单词Bin
几乎忽略了该符号的所有结果(带有符号的结果在没有搜索结果的搜索中会显示得更高)。
这是我创建的搜索方法
def self.search(params)
tire.search(load: true) do
query { string "#{params[:term].downcase}:#{params[:query]}", default_operator: "AND" }
size 1000
end
end
这是我构建搜索表单的方式:
<div>
<%= form_tag issues_path, :class=> "formtastic issue", method: :get do %>
<fieldset class="inputs">
<ol>
<li class="string input medium search query optional stringish inline">
<% opts = ["Description", "Detail","Deviation","Equipment","Recipe", "Step"] %>
<%= select_tag :term, options_for_select(opts, params[:term]) %>
<%= text_field_tag :query, params[:query] %>
<%= submit_tag "Search", name: nil, class: "btn" %>
</li>
</ol>
</fieldset>
<% end %>
</div>
您可以清理查询字符串。这是一种消毒剂,适用于我尝试扔给它的所有东西:
def sanitize_string_for_elasticsearch_string_query(str)
# Escape special characters
# http://lucene.apache.org/core/old_versioned_docs/versions/2_9_1/queryparsersyntax.html#Escaping Special Characters
escaped_characters = Regexp.escape('\\/+-&|!(){}[]^~*?:')
str = str.gsub(/([#{escaped_characters}])/, '\\\\\1')
# AND, OR and NOT are used by lucene as logical operators. We need
# to escape them
['AND', 'OR', 'NOT'].each do |word|
escaped_word = word.split('').map {|char| "\\#{char}" }.join('')
str = str.gsub(/\s*\b(#{word.upcase})\b\s*/, " #{escaped_word} ")
end
# Escape odd quotes
quote_count = str.count '"'
str = str.gsub(/(.*)"(.*)/, '\1\"\3') if quote_count % 2 == 1
str
end
params[:query] = sanitize_string_for_elasticsearch_string_query(params[:query])
在我删除索引之后。php,我在codeigniter中启用查询字符串。但我有一些重定向链接的问题。详细信息,我有登录表单(登录/索引),登录成功时重定向到“欢迎/索引”,并在会话中保存电子邮件。 但是登录成功时只加载视图的"欢迎/索引"和错误的链接,现在链接是:"?登录/索引"并且会话不保存。请帮帮我。 这是我的密码 登录。php(控制器) Welcome.php(控制器) 欢迎留言。php(视图
问题内容: 我正在尝试将范围查询与elasticsearch一起使用 但是弹性返回没有结果。我发现系统存在字符串包含或问题 这是该字段的映射: 问题答案:
问题内容: 有没有人知道我可以用来操纵查询字符串的java类? 本质上,我想要一个可以简单地给查询字符串提供一个类,然后删除,添加和修改查询字符串KVP的类。 提前致谢。 编辑 为了回应对此问题的评论,查询字符串将如下所示; 所以我想向这个类传递查询字符串,并说类似的东西; 然后也许 有可能 或类似的东西。 问题答案: 像这样 要简单地迭代地图:
问题内容: 在SQL中,您可以编写查询来搜索这样的人的名字: 该查询将使用Unicode字符运行(假设“名称”列和数据库已设置为处理Unicode支持)。 我在由Hibernate(NHibernate)运行的HQL中有一个类似的查询。生成的查询如下所示: 不幸的是,在HQL中的文字前面加一个“ N”会导致错误。我尝试转义字符串中的unicode字符,但仍然没有成功。 数据库正在接受并保存来自Hi
问题内容: 在此“ Hello World”示例中: 如何从查询字符串中获取参数? 他们在文档中提到: 但是我不知道如何使用它。有人可以解释吗? 问题答案: 您可以使用从方法URL模块在请求回调。 我建议您阅读HTTP模块文档,以了解回调函数。您还应该看看http://howtonode.org/之类的网站,并检查Express框架以更快地开始使用Node。
使用php或javascript或regex,是否有一个快速(希望是一行程序)从前一个(引用者)URL获取查询字符串? 从第二页...我想知道前面的查询字符串“One”。