使用Morphia在MongdoDB中进行多个关键字搜索,对于具有多个文本索引字段的文档

时间:2016-05-01 17:42:39

标签: mongodb full-text-search morphia database

我需要您的建议,在文档中搜索多个关键字的索引。

假设我有一个实体Employee,如下所示,我在本文档中有多个索引字段。

abstract class Entity : MapObject, Killable
{
    public abstract void Kill(); // or without "abstract" if method needs a body
}

所以我想在这个文档中进行多个关键字搜索($ in)..并获取结果列表。我正在使用Morphia框架,需要使用相同的

建议

现在我正在使用最新的Morphia(1. +)和MongoDB(3。+)。在morphia中,我只能在特定字段上进行多个关键字搜索($ in)而不是整个文档。

@Entity("employee")
@Indexes({@Index(fields = @Field(value = "employeeName", type = IndexType.TEXT)),
          @Index(fields = @Field(value = "employeeDept", type = IndexType.TEXT)),})
public class Employee {

    @Id private ObjectId id;

    private long empId;

    private String employeeName;

    private String employeeDept;

    ..... Many other fields!!!!

但是我可以说我有一个搜索查询来查找datastore.find(Employee.class).field("employeeName").in(Arrays.asList("name1","name2")).limit(BATCH_SIZE).asList(); ..如果有任何关键字匹配,我想在搜索结果中返回该文档。

我该怎么做?

更新

我没有在整个文档上使用search(),因为我将每个单词视为单独的搜索条件。

1 个答案:

答案 0 :(得分:0)

以下内容应该有效:

Query<Employee> query = datastore.createQuery(Employee.class);
List<String> names = Arrays.asList("name1","name2");

query.or(
     query.criteria("employeeName").hasAnyOf(names),
     query.criteria("employeeDept").hasAnyOf(names)
);
List<Employee> employees = query.limit(BATCH_SIZE).asList();

IndexType.TEXT无法帮助您解决该问题 - 如果您未使用search(),则表示您未使用全文搜索。但我认为每个属性(而不是组合)的索引是正确的方法,因为or查询是独立执行并合并的。

PS:我不希望这对于更大的数据集来说太快了。