import org.springframework.data.jpa.repository.JpaRepository;
public interface ItemRepository extends JpaRepository<Item, Long> {
// Find nearest neighbors by a vector, for example value = "[1,2,3]"
// This also works, cast is equals to the :: operator in postgresql
//@Query(nativeQuery = true, value = "SELECT * FROM items ORDER BY embedding <-> cast(? as vector) LIMIT 5")
@Query(nativeQuery = true, value = "SELECT * FROM items ORDER BY embedding <-> ? \\:\\:vector LIMIT 5")
List<Item> findNearestNeighbors(String value);
// Find nearest neighbors by a record in the same table
@Query(nativeQuery = true, value = "SELECT * FROM items WHERE id != :id ORDER BY embedding <-> (SELECT embedding FROM items WHERE id = :id) LIMIT 5")
List<Item> findNearestNeighbors(Long id);
}
型 1.测试创建、查询和findNearestNeighbors:
@Autowired
private ItemRepository itemRepository;
@Test
@Rollback(false)
@Transactional
public void createItem() {
Item item = new Item();
Random rand = new Random();
List<Double> embedding = new ArrayList<>();
for (int i = 0; i < 3; i++)
embedding.add(rand.nextDouble());
item.setEmbedding(embedding);
itemRepository.save(item);
}
@Test
public void loadItems() {
final List<Item> items = itemRepository.findAll();
System.out.println(items);
}
@Test
public void findNearestNeighbors() {
final String value = "[0.1, 0.2, 0.3]";
final List<Item> items = itemRepository.findNearestNeighbors(value);
System.out.println(items);
}
1条答案
按热度按时间u4dcyp6a1#
您可以使用vladmihalcea Hibernate类型将向量类型转换为List,因此可以使用JpaRepository保存或查询。
1.将依赖项添加到pom.xml文件:
字符串
1.创建 Item 类:
型
1.创建一个支持保存和查找的JpaRepository接口。您可以使用本机SQL编写自定义findNearestNeighbors方法
型
1.测试创建、查询和findNearestNeighbors:
型