- xml - AJAX/Jquery XML 解析
- 具有多重继承的 XML 模式
- .net - 枚举序列化 Json 与 XML
- XML 简单类型、简单内容、复杂类型、复杂内容
我在 Rails 应用程序中使用 pg_search gem 来搜索用户 - 他们的简历和相关技能模型。用户是开发人员,所以他们的技能包括“CSS”、“C++”、“C#”、“Objective C”等...
我最初使用以下搜索范围:
pg_search_scope :search,
against: [:bio],
using: {tsearch: {dictionary: "english", prefix: true}},
associated_against: {user: [:fname, :lname], skills: :name}
但是,如果您在这种情况下搜索“C++”,您会得到包含“CSS”(以及其他内容)的结果。我更改了范围以使用“简单”字典并删除了前缀:
pg_search_scope :search_without_prefix,
against: [:bio],
using: {tsearch: {dictionary: "simple"}},
associated_against: {user: [:fname, :lname], skills: :name}
这修复了一些问题——例如,搜索“C++”不会显示“CSS”。但是,搜索“C++”或“C#”仍然匹配列出了“C”或“Objective C”的用户
我绝对可以进行基本的 ILIKE
匹配,但希望尽可能使用 pg_search 来完成。
最佳答案
我会发表评论,但我还没有足够的声誉。
我一直在研究 pg_search
,这让我更深入地了解 PostgreSQL 全文搜索。这是一个复杂的模块,但它有 ts_debug() 命令来帮助理解输入字符串的解析方式。测试字符串“C++ CSS C# Objective C”的 ts_debug() 输出非常有启发性。看起来“# 和”+“在英语的默认配置中被视为空格。我认为您可能必须修改 PostgreSQL 中的解析器才能获得您想要的行为。
postgres=# SELECT * FROM ts_debug('english', 'C++ CSS C# Objective C');
alias | description | token | dictionaries | dictionary | lexemes
-----------+-----------------+-----------+----------------+--------------+----------
asciiword | Word, all ASCII | C | {english_stem} | english_stem | {c}
blank | Space symbols | + | {} | |
blank | Space symbols | + | {} | |
asciiword | Word, all ASCII | CSS | {english_stem} | english_stem | {css}
blank | Space symbols | | {} | |
asciiword | Word, all ASCII | C | {english_stem} | english_stem | {c}
blank | Space symbols | # | {} | |
asciiword | Word, all ASCII | Objective | {english_stem} | english_stem | {object}
blank | Space symbols | | {} | |
asciiword | Word, all ASCII | C | {english_stem} | english_stem | {c}
(10 rows)
顺便说一句,如果你想学习 PostgreSQL 全文搜索,这里有一个非常有用的教程:http://shisaa.jp/postset/postgresql-full-text-search-part-1.html
更新:
我在 PostgreSQL 全文搜索中找到了一个解决方案。它涉及使用此处记录的 test_parser
扩展:http://www.postgresql.org/docs/9.1/static/test-parser.html
首先需要在psql
中进行一些配置:
postgres=# CREATE EXTENSION test_parser;
postgres=# CREATE TEXT SEARCH CONFIGURATION testcfg ( PARSER = testparser );
postgres=# ALTER TEXT SEARCH CONFIGURATION testcfg
ADD MAPPING FOR word WITH english_stem;
现在您可以索引一个测试字符串,并看到像“C++”这样的术语被视为单独的标记,如您所愿:
postgres=# SELECT to_tsvector('testcfg', 'C++ CSS C# Objective C #GT40 GT40 added joined');
to_tsvector
----------------------------------------------------------------------------
'#gt40':6 'ad':8 'c':5 'c#':3 'c++':1 'css':2 'gt40':7 'join':9 'object':4
(1 row)
问题仍然是如何将它集成到 pg_search
中。我正在看接下来。
关于ruby-on-rails - 使用 pg_search 匹配特殊字符(例如#、+),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19391356/
在我的应用程序中,我有许多模型,我想向其中添加多重搜索,我觉得我已经完成了所需的一切,但是在控制台中,当我运行以下命令时,我得到一个空的 []。 PgSearch.multisearch("Red")
在我的应用程序中,我有许多模型,我想向其中添加多重搜索,我觉得我已经完成了所需的一切,但是在控制台中,当我运行以下命令时,我得到一个空的 []。 PgSearch.multisearch("Red")
Ruby on Rails 新手。我正在尝试使用 pg_search gem 但遇到了一些困难(是的,我正在查看文档)。我想要一个包含文本字段和选择字段(类别)的搜索表单。这是我到目前为止的代码: c
我正在关注 this Railscasts 插曲。 如果我搜索“Kerber”,它会返回正确的文章。但是,如果我搜索“Ke”,它不会返回同一篇文章。 有办法解决这个问题吗? class Item <
我正在使用 pg-search 在模型中进行搜索。我遇到的问题是,如果我搜索一个字段或另一个字段中的关键字,它会起作用,但如果我输入我知道在我正在使用的 2 个字段中的关键字,它不会返回任何内容。 这
当尝试在文档中查找“Harrison Ford”时,pg_search 将返回任何包含“Harrison”和“Ford”的文本,例如: pg_search_scope :search_by_ful
我的“ Assets ”模型有一个搜索页面,除了搜索特定于“serial_no”字段的任何内容之外,一切正常。 Assets .rb # == Schema Information # # Table
我的模型有以下范围: class Cloth :destroy pg_search_scope :full_search, associated_against: { clo
我正在尝试在我的 Rails 应用程序中使用 pg_search gem 从一个搜索栏中搜索大量模型。 我添加了搜索栏:
我有一个使用 pg_search 的 Rails 应用程序gem 以利用 PostgreSQL 的全文搜索功能。 手册中提到搜索具有(例如)has_many 关系的模型: Searching thro
我正在尝试在我的 Rails 应用程序中实现全文搜索。我使用 PostgreSQL 作为数据库,因此,使用 PostgreSQL 的全文搜索功能。我有两个模型 Users 和 Scoreboards,
我正在使用 Rails 4.2 中的 pg_search gem 来搜索模型中的名称。我有以下内容: pg_search_scope :search_for_dashboard, lambda
我正在使用 gem pg_search在我的 postgres 数据库上执行全文搜索。我有这样的范围: pg_search_scope :fulltext, against: [:firstname,
这是我的pg_search 方法: pg_search_scope :node_search, against: [:name, :user_id, :circa, :cached_tagged_
我有一个 Node 类,我在上面设置了 acts_as_taggable,所以我可以将 user_tags 添加到任何节点。我的 Node 模型也有一个方法,可以查找 user_tag_list 中所
我在我的 Node 模型上实现了 PgSearch,如下所示: include PgSearch pg_search_scope :node_search, against: [:name, :use
有没有办法从模型而不是索引表条目中获取 pg_search 结果?我的代码有效,但我必须遍历结果。 search = PgSearch.multisearch(params[:search]) @it
我正在使用 pg_search 并尝试在标题中搜索特殊字符。 例如,我有两行包含此信息: id title 1 GT40 2 #GT40 所以当我搜索“#GT40”时,pg_se
我将 Rails 4.2.4 与 pg_search 1.0.5 一起使用。 class Advert [:title, :body] end 我想按 :created_at 对 pg_search
我正在使用这个 stackoverflow answer尝试为我的 Rails 应用程序实现 Twitter Typeahead,我还尝试实现 Github自述文件,但当我在文本框中输入内容时没有文本
我是一名优秀的程序员,十分优秀!