首页 \ 问答 \ 如何使用Hibernate Analyzer?(How to use Hibernate Analyzer?)

如何使用Hibernate Analyzer?(How to use Hibernate Analyzer?)

我试图在我的hibernate查询中搜索特殊字符,我使用QueryParser.escape(String searchTerm)在所有特殊字符前放置一个'\'字符以正确地转义它们。

但是我发现用于标记化的标准分析器会从索引中删除这些特殊字符,所以即使你正确地逃避术语'abc-def',如果你尝试搜索它,你也必须搜索'abc def'。

那么我应该使用什么样的分析器/如何指定分析器在索引时不要删除特殊字符?

下面是我的带注释的类和查询构建的片段:

@Entity
@Table(name="jobReq")
@Indexed
public class JobReq {

@Id
@DocumentId
@GeneratedValue(strategy=GenerationType.IDENTITY)
private Integer id;

@Field
@Column(name="jobId", nullable=false, unique=true)
private String jobId;

@Fields({@Field, @Field(name = "jobIdSort", analyze = Analyze.NO)})
@Column(name="jobIdSort", nullable=false, unique=true)
private String jobIdSort;

@Field
@Column(name="jobTitle", nullable=false)
private String jobTitle;

查询:

tempQ = (org.apache.lucene.search.Query) qb.keyword()
                                .wildcard()
                                .onField(allFields[i].getName().toString())
                                .matching(QueryParser.escape(termToFind) + "*")
                                .createQuery();
                    }   
                    bq.add(new BooleanClause(tempQ, BooleanClause.Occur.SHOULD));
                }
            }
        }
        //wrap Lucene query in an org.hibernate.Query
        hibQuery = fullTextSession.createFullTextQuery(bq, this.type).setSort(sort);
        results = hibQuery.list();
        System.out.println(bq);
        fullTextSession.getTransaction().commit();

I am trying to search for special characters in my hibernate query, I use QueryParser.escape(String searchTerm) to put a '\' character in front of all the special characters to escape them properly.

However I have found out that the standard analyzer used to tokenize removes these special characters from the index, so even if you properly escape the term 'abc-def' if you try and search it you would have to search 'abc def'.

So what analyzer should I use/how should I specify for the analyzer not to remove the special character when indexing?

A snippet of my annotated class and query building below:

@Entity
@Table(name="jobReq")
@Indexed
public class JobReq {

@Id
@DocumentId
@GeneratedValue(strategy=GenerationType.IDENTITY)
private Integer id;

@Field
@Column(name="jobId", nullable=false, unique=true)
private String jobId;

@Fields({@Field, @Field(name = "jobIdSort", analyze = Analyze.NO)})
@Column(name="jobIdSort", nullable=false, unique=true)
private String jobIdSort;

@Field
@Column(name="jobTitle", nullable=false)
private String jobTitle;

Query:

tempQ = (org.apache.lucene.search.Query) qb.keyword()
                                .wildcard()
                                .onField(allFields[i].getName().toString())
                                .matching(QueryParser.escape(termToFind) + "*")
                                .createQuery();
                    }   
                    bq.add(new BooleanClause(tempQ, BooleanClause.Occur.SHOULD));
                }
            }
        }
        //wrap Lucene query in an org.hibernate.Query
        hibQuery = fullTextSession.createFullTextQuery(bq, this.type).setSort(sort);
        results = hibQuery.list();
        System.out.println(bq);
        fullTextSession.getTransaction().commit();

原文:https://stackoverflow.com/questions/18237489
更新时间:2022-03-25 07:03

最满意答案

两个问题。

第一:

LineT::LineT(PointT::PointT st, MapTypes::CompassT ornt, unsigned int l) {
//                 ^^^^^^^^

不。

LineT::LineT(PointT st, MapTypes::CompassT ornt, unsigned int l) {

第二: PointT没有默认的构造函数,所以你必须初始化它,而不是稍后分配给它。

LineT::LineT(PointT st, MapTypes::CompassT ornt, unsigned int l)
    : s(st)
    , o(ornt)
    , L(l)
{}

作为一种风格,我还建议使用更清晰和更一致的名称。


Two problems.

First:

LineT::LineT(PointT::PointT st, MapTypes::CompassT ornt, unsigned int l) {
//                 ^^^^^^^^

Nope.

LineT::LineT(PointT st, MapTypes::CompassT ornt, unsigned int l) {

Second: PointT has no default constructor, so you must initialise it, not merely assign to it later.

LineT::LineT(PointT st, MapTypes::CompassT ornt, unsigned int l)
    : s(st)
    , o(ornt)
    , L(l)
{}

As a point of style, I would also recommend using much clearer and more consistent names.

相关问答

更多

相关文章

更多

最新问答

更多
  • 如何使用自由职业者帐户登录我的php网站?(How can I login into my php website using freelancer account? [closed])
  • 如何打破按钮上的生命周期循环(How to break do-while loop on button)
  • C#使用EF访问MVC上的部分类的自定义属性(C# access custom attributes of a partial class on MVC with EF)
  • 如何获得facebook app的publish_stream权限?(How to get publish_stream permissions for facebook app?)
  • 如何并排放置两个元件?(How to position two elements side by side?)
  • 在MySQL和/或多列中使用多个表用于Rails应用程序(Using multiple tables in MySQL and/or multiple columns for a Rails application)
  • 如何隐藏谷歌地图上的登录按钮?(How to hide the Sign in button from Google maps?)
  • Mysql左连接旋转90°表(Mysql Left join rotate 90° table)
  • 带有ImageMagick和许多图像的GIF动画(GIF animation with ImageMagick and many images)
  • 电脑高中毕业学习去哪里培训
  • 电脑系统专业就业状况如何啊?
  • IEnumerable linq表达式(IEnumerable linq expressions)
  • 如何在Spring测试中连接依赖关系(How to wire dependencies in Spring tests)
  • Solr可以在没有Lucene的情况下运行吗?(Can Solr run without Lucene?)
  • 如何保证Task在当前线程上同步运行?(How to guarantee that a Task runs synchronously on the current thread?)
  • 在保持每列的类的同时向数据框添加行(Adding row to data frame while maintaining the class of each column)
  • 的?(The ? marks in emacs/haskell and ghc mode)
  • 一个线程可以调用SuspendThread传递自己的线程ID吗?(Can a thread call SuspendThread passing its own thread ID?)
  • 延迟socket.io响应,并“警告 - websocket连接无效”(Delayed socket.io response, and “warn - websocket connection invalid”)
  • 悬停时的图像转换(Image transition on hover)
  • IIS 7.5仅显示homecontroller(IIS 7.5 only shows homecontroller)
  • 没有JavaScript的复选框“关闭”值(Checkbox 'off' value without JavaScript)
  • java分布式框架有哪些
  • Python:填写表单并点击按钮确认[关闭](Python: fill out a form and confirm with a button click [closed])
  • PHP将文件链接到根文件目录(PHP Linking Files to Root File Directory)
  • 我如何删除ListView中的项目?(How I can remove a item in my ListView?)
  • 您是否必须为TFS(云)中的每个BUG创建一个TASK以跟踪时间?(Do you have to create a TASK for every BUG in TFS (Cloud) to track time?)
  • typoscript TMENU ATagParams小写(typoscript TMENU ATagParams lowercase)
  • 武陟会计培训类的学校哪个好点?
  • 从链接中删除文本修饰(Remove text decoration from links)