Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/393.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java Hibernate列表字段上的Lucene搜索_Java_Hibernate_Jpa_Lucene - Fatal编程技术网

Java Hibernate列表字段上的Lucene搜索

Java Hibernate列表字段上的Lucene搜索,java,hibernate,jpa,lucene,Java,Hibernate,Jpa,Lucene,我有一个Hibernate注释类TestClass,它包含一个List字段,我正在用Lucene索引该字段。考虑下面的例子: “Foo Bar”和“Bar Snafu”是特定记录列表中的两个条目。现在,如果用户在TestClass上搜索“Foo Snafu”,那么就会找到记录,我猜是因为标记Foo和标记Snafu都是该记录的列表中的标记 有什么方法可以防止这种情况发生吗 现实世界的例子是一个有原告和被告名单的法庭案件。假设有两个人被起诉,乔·刘易斯·鲍勃和罗伯特·克莱·史密斯。这些用户存储在被告

我有一个Hibernate注释类
TestClass
,它包含一个
List
字段,我正在用Lucene索引该字段。考虑下面的例子:

“Foo Bar”
“Bar Snafu”
是特定记录列表中的两个条目。现在,如果用户在TestClass上搜索
“Foo Snafu”
,那么就会找到记录,我猜是因为标记Foo和标记Snafu都是该记录的
列表中的标记

有什么方法可以防止这种情况发生吗

现实世界的例子是一个有原告和被告名单的法庭案件。假设有两个人被起诉,乔·刘易斯·鲍勃和罗伯特·克莱·史密斯。这些用户存储在被告名单中的法庭案件记录中。这张被告名单用Lucene索引。现在,如果用户搜索前面提到的两个被告中的任何一个,案件就会被找到。但如果用户搜索
刘易斯·史密斯
,或
乔·克莱
,也会发现这种情况

更新:在Lucene IRC频道中提到,我可以使用多值字段


更新2:在Solr IRC频道中提到,我可以使用
schema.xml
中的
positionIncrementGap
设置来实现这一点。显然,如果我使用短语查询(带或不带slop),那么“增量间隔确保同一字段中的不同值不会导致意外匹配”。

Lucene将连续添加到同一文档中的同一字段,并将其添加到字段中已有的内容的末尾

如果要将列表中的每个成员视为一个完全独立的实体,则应在不同的字段中为其编制索引。您可以将索引附加到已使用的字段名。当然,虽然我没有关于您需求的完整信息,但这样做可能是更好的解决方案


如果您只想搜索精确的文本
“Foo Snafu”
,可以使用。如果您想确保短语查询不会从一个列表项跨到下一个列表项(即,如果索引中有
“Bar Foo”
“Snafu Bar”
),则可以在写入索引时在每个成员之间插入某种形式的定界词。

如果它是一个列表,并且“Foo Bar”和“Bar Snafu”是不同的实体……那么请列出[i] .. 其中“i”是一个计数器变量。。。只会指向“foo bar”和“bar snafu”作为一个整体“foo snafu”不作为实体存在。。。就我理解你的问题而言,这是我能告诉你的。也许你可以详细说明一下?@Philo是的,但是Lucene正在标记所有隐藏的名称。我将无法使用不同的字段,因为特定记录的列表大小将是动态的。