Android中的Lucene

lmyy7pcs  于 2023-08-05  发布在  Lucene
关注(0)|答案(6)|浏览(265)

我是Android和Lucene的新手。我可以使用Lucene搜索在android list view .我已经尝试导入package 2.3.2,也使用了库中的jar文件。但是,在SearchFiles.java中有一个错误是:
The type java.rmi.Remote cannot be resolved. It is indirectly referenced from .class files.
有一个可能性,这个文件不存在的Android.这就是问题所在吗

k97glaaz

k97glaaz1#

您可能希望使用SQLite中称为FTS3的原生Full Text Search功能,该功能在Android中可用,并且速度更快(因为它是原生运行的),并且比Dalvik VM下的Java Lucene实现使用更少的内存。

i2loujxw

i2loujxw2#

我已经成功地使用Lucene 3.3进行了非常简单的搜索,它工作正常。但是,我不知道内存使用的影响是什么。在3.3版本中,不存在对RMI的依赖。如果你需要2.3.2并且你有源代码,你可以把Lucene从RMI依赖中解放出来(我读到过一个人成功地做到了这一点)。

g6ll5ycj

g6ll5ycj3#

1.从类“org.apache.lucene.search.Searchable”中删除“extendsjava.rmi.Remote”
1.删除类“org.apache.lucene.search.RemoteSearchable”

p4tfgftt

p4tfgftt4#

Android不是Java --它不提供所有标准的Java API(只要看看Android参考,java.rmi不在那里)。然而,导入几乎所有纯java的东西都是可能的(如果你有足够的内存)。你可以尝试从jar中删除不必要的类,这会导致类加载问题,但这是一项很大的工作。

bfhwhh0e

bfhwhh0e5#

我认为这个演示应用程序将为您工作。
https://github.com/weiweiwang/quickdialer
它有:

  • 快速T9搜索
  • 支持5000个触点
  • 500个呼叫日志
js4nwp54

js4nwp546#

此存储库修改Lucene 7.3.0以便在Android 8.0中使用:https://github.com/texophen/lucene-android
如果它不起作用,你可以修改org.apache.lucene.util.AttributeFactory并将你的类型添加到下面的方法中:

static final MethodHandle findAttributeImplCtor(Class<? extends AttributeImpl> clazz) {
    try {
      //org.apache.lucene.LucenePackage.writeLog("AttributeFactory.findAttributeImplCtor() - 1: " + lookup.findConstructor(clazz, NO_ARG_CTOR).toString());
      MethodHandle mh = null;
      if (lookup.findConstructor(clazz, NO_ARG_CTOR).toString().endsWith("PackedTokenAttributeImpl")) {
        mh = lookup.findConstructor(clazz, NO_ARG_CTOR).asType(MethodType.methodType(org.apache.lucene.analysis.tokenattributes.PackedTokenAttributeImpl.class));
      } else {
        mh = lookup.findConstructor(clazz, NO_ARG_CTOR).asType(NO_ARG_RETURNING_ATTRIBUTEIMPL);
      }
      //org.apache.lucene.LucenePackage.writeLog("AttributeFactory.findAttributeImplCtor() - 2: " + mh.toString());
      return mh;
    } catch (NoSuchMethodException | IllegalAccessException e) {
      throw new IllegalArgumentException("Cannot lookup accessible no-arg constructor for: " + clazz.getName(), e);
    }
  }

字符串

相关问题