我需要您的建议,在文档中搜索多个关键字的索引。
假设我有一个实体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(),因为我将每个单词视为单独的搜索条件。
答案 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:我不希望这对于更大的数据集来说太快了。